Можно ли «скрыть» скроллеры NSScrollView и по-прежнему получать жесты прокрутки?
Может ли NSScrollView прокручиваться, если setHasHorizontalScroller: NO?
Ответы (5)
Создайте подкласс NSScroller и установите его как средство вертикальной/горизонтальной прокрутки для экземпляра NSScrollView.
Подкласс NSScroller должен переопределить это (10.7 и выше):
+ (CGFloat)scrollerWidthForControlSize:(NSControlSize)controlSize scrollerStyle:(NSScrollerStyle)scrollerStyle {
return 0;
}
Это определенно ошибка в AppKit. Мне удалось заставить это работать на 10.8.5, используя одно из следующих решений:
1) Подкласс NSScroller (предпочтительный метод)
+ (BOOL)isCompatibleWithOverlayScrollers
{
// Let this scroller sit on top of the content view, rather than next to it.
return YES;
}
- (void)setHidden:(BOOL)flag
{
// Ugly hack: make sure we are always hidden.
[super setHidden:YES];
}
Источник: jmk в https://stackoverflow.com/a/12960795/836263
2) Отскок и импульс кажутся нарушенными при использовании устаревшего стиля. Это также частично нарушает синхронизацию прокрутки код. Это приводит к тому, что представления прокрутки сбрасывают положение прокрутки, если одно NSScrollerStyleOverlay
, а другое NSScrollerStyleLegacy
. Если вид прокрутки в стиле наложения прокручивается, а затем прокручивается устаревший стиль, он сбрасывает оба представления прокрутки до верхнего смещения прокрутки y = 0.
[self.scrollView setHasVerticalScroller:YES];
[self.scrollView setScrollerStyle:NSScrollerStyleLegacy];
[self.scrollView setHasVerticalScroller:NO];
Заставляет вид прокрутки не отображать скроллер и не реагировать на жестовую прокрутку:
-setHasHorizontalScroller:NO
Отображает отключенный скроллер, но он реагирует на жестовую прокрутку:
-setHasHorizontalScroller:YES
-setHidden:YES
Да, это возможно. Попробуйте это вскоре после инициализации scrollView.
self.scrollView.wantsLayer = YES;
Я заставил это работать, не скрывая подкласс NSScroller
и не касаясь setHasVerticalScroller:
. Кроме того, если self.scrollView
является подклассом, переопределяющим drawRect:
, попробуйте отключить его, чтобы убедиться, что то, что вы там делаете, не вызывает проблемы.
Почему бы тебе просто не попробовать?
Чтобы ответить на вопрос: да, если у пользователя есть мышь с колесиком прокрутки или сенсорная панель с возможностью прокрутки, все равно можно прокручивать представление, несмотря на то, что скроллеры невидимы.