Уменьшить NSScroller из NSScrollView в многоуровневом представлении

У меня возникла странная проблема (ошибка?): скажем, у меня есть WebView, который будет прокручиваться вертикально.

Теперь я хочу немного уменьшить вертикальный скроллер mainFrame, чтобы его высота была меньше, чем сам NSScrollView.

введите здесь описание изображения

Причина этого в том, что я хочу закрепить два представления (сверху и снизу) над веб-просмотром.

Я легко сделал это в методе делегата frameLoad, изменив рамку verticalScroller (изменив начало координат и высоту).

Это работает, но:

Однако, как только я установил для webView и его родительского NSView с поддержкой слоя, он перестает работать, скроллер сбрасывает себя до положения и высоты по умолчанию.

Теперь не знаю, баг это или нет. Есть ли другой способ, которым я мог бы попытаться «вставить» скроллер?


person Raffael    schedule 07.10.2013    source источник


Ответы (1)


Пробовали ли вы создать подкласс NSScroller, установив его как вертикальный скроллер для вашего NSScrollView и переопределив

-(void) setFrameOrigin:(NSPoint)origin;
-(void) setFrameSize:(NSSize)size;

Я предполагаю, что создание NSView с поддержкой слоя приводит к тому, что frameSize снова устанавливается (NSScrollView, кажется, берет на себя довольно много контроля над этим, потому что при создании пользовательского скроллера нет «чистого» способа установить NSScroller как горизонтальный или вертикальный другой чем вызов -initWithFrame: с

  1. высота > ширина, чтобы автоматически установить его как вертикальный
  2. ширина > высота, чтобы автоматически установить его как горизонтальный

Мое другое предложение: если вы хотите, чтобы NSScroller не полностью отражал размер своего родительского NSScrollView, вам лучше иметь NSView в качестве представления содержимого веб-просмотра. И NSView имеет 3 подвида. Два представления сверху и снизу закреплены и одно представление NSScrollView посередине. В этом случае пользовательский NSScroller не требуется.

person lead_the_zeppelin    schedule 03.11.2013
comment
Спасибо, lead_the_zeppelin, в итоге я использовал дополнительный NSScroller, который отслеживает изменения значения прокрутки, а также устанавливает значение: RMSecondaryScroller. Однако я проверю, работает ли ваш первый подход более надежно! - person Raffael; 10.11.2013