Как мне встроить WebView в NSScrollView?

Итак, у меня есть проект, в котором некоторое содержимое отображается в WebView, и я хочу придерживаться этого. Я хочу, чтобы заголовок прокручивался вместе с контентом WebView. Теперь WebView, как правило, хочет выполнять свою собственную прокрутку, но вы можете сказать, что не используйте:

[[webView mainFrame] setAllowsScrolling:NO];

который успешно заставляет полосы прокрутки WebView не появляться. Однако, несмотря на то, что он встроен в NSScrollView, полосы прокрутки NSScrollView никогда не активируются. Я могу только заключить, что WebView нужно указать, чтобы изменить размер, но я не могу понять, как это сделать. Я пробовал следующее:

NSRect webViewBounds = [webView bounds];
[webView setFrameSize:webViewBounds.size];

но это тоже не работает.

Какие-либо предложения?

13.10.2009 10:14:00
3 ОТВЕТА
РЕШЕНИЕ

Альтернативное решение: как насчет выражения заголовка в HTML / CSS / JavaScript и помещения реального содержимого в iframe? Вы можете просмотреть иерархию фреймов, чтобы найти объект WebFrame для этого фрейма, и использовать DOM (возможно, обернутый собственным объектом) для управления заголовком.

0
14.10.2009 03:34:59
Да, я думал попробовать это. Похоже на кучу, но если это то, что нужно ... =)
Benno 14.10.2009 05:28:30

Я быстро взглянул на документы по этому вопросу, возможно, глупый вопрос; после изменения размера кадра отправляете ли вы setNeedsDisplayсообщение на просмотр?

0
13.10.2009 16:19:29
Да. Нет разницы. Я подозреваю, что проблема может быть в том, что размер WebView зависит от размера, который я дал в Интерфейсном Разработчике. Я не уверен, как сказать, что он может быть настолько большим, насколько он хочет, или как узнать, насколько большим может быть данный контент. Я мог бы просто попытаться придать ему огромный вертикальный размер и посмотреть, как оно пойдет.
Benno 13.10.2009 20:26:06

Границы и фрейм в вашем коде должны иметь одинаковый размер. Установка одного на другой ничего не меняет.

Сегодня я немного поиграл с классом WebView. При моем подходе вам не придется добавлять свой заголовок в код HTML. Регистрация для уведомления дает вам отправную точку:

  [[NSNotificationCenter defaultCenter] addObserver:self 
    selector:@selector(webViewDidScroll:)
    name:NSViewBoundsDidChangeNotification object:nil];

Затем вы можете проверить класс отправителя уведомления (предположим, у вас есть только один WebView):

- (void)webViewDidScroll:(NSNotification *)aNotification
{
  if ([[aNotification object] isKindOfClass:NSClassFromString(@"WebClipView")])
  {
    // Do whatever you like; scroll your header etc.
  }
}
0
16.04.2011 18:55:25