Поведение NSScrollView в Snow Leopard vs. Lion (прозрачность NSScroller) - PullRequest
1 голос
/ 02 августа 2011

У меня проблема с настройкой NSScrollView в InterfaceBuilder (XCode 4), чтобы он хорошо смотрелся как в Snow Leopard, так и в Lion.

У меня есть четыре NSView, которые содержат элементы управления, к которым необходимо получить доступпри использовании программы.Я поместил представления друг под другом внутри представления NSScrollView, которое должно отображать вертикальную полосу прокрутки, когда окно становится маленьким, чтобы отобразить все.(Представление является настраиваемым представлением, которое возвращает [customView isFlipped] == YES в качестве единственной настройки.)

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

При такой конфигурации все работает хорошо в Snow Leopard.Но когда я использую Lion, вертикальная полоса прокрутки отображается не поверх пользовательского представления, а внутри непрозрачной серой полосы с правой стороны.Это не исчезает, когда полоса прокрутки скрыта, либо потому, что окно достаточно велико, либо потому что Лев скрывает полосу прокрутки, когда она не используется.Это выглядит очень непрофессионально, потому что у меня есть некоторые элементы, которые охватывают всю ширину пользовательского вида и теперь останавливаются на 15 пунктов от границы окна.Я могу сделать это правильно в Lion, когда я устанавливаю ширину настраиваемого представления равной ширине NSScrollView (+ 15pt для ширины одного NSScroller), но затем представление прокручивается горизонтально в Snow Leopard, если вертикальная полоса прокруткиотображается.Есть ли способ заставить его выглядеть правильно с обеими системами?

Я компилирую с Snow Leopard 10.6 SDK и Leopard 10.5 как минимальную ОС.

1 Ответ

2 голосов
/ 24 августа 2011

Вы можете проверить предпочитаемыйScrollerStyle вашего [класса NSScroller], и если он не равен нулю (на самом деле это NSScrollerStyleLegacy, но у вас его нет в SDK 10.6), то увеличьте свое представление, как вы упоминали выше.Также не забудьте проверить, отвечает ли ваш класс скроллера на этот селектор (и вызвать его с помощью executeSelector :), поскольку он был добавлен только в SDK 10.7.Или вы можете использовать свой собственный потомок NSScroller, который перегружает isCompatibleWithOverlayScrollers для возврата false.Тогда у вас будут старые скроллеры шириной 15pt даже на Lion.

...