Может NSScrollView прокрутить, если setHasHor horizontalScroller: НЕТ? - PullRequest
7 голосов
/ 17 мая 2011

Можно ли «спрятать» скроллеры NSScrollView и при этом по-прежнему использовать жестовую прокрутку?

Ответы [ 5 ]

4 голосов
/ 04 октября 2012

Создайте подкласс NSScroller и установите его в качестве вертикального / горизонтального скроллера для экземпляра NSScrollView.

Подкласс NSScroller должен переопределить это (10.7 и выше):

+ (CGFloat)scrollerWidthForControlSize:(NSControlSize)controlSize scrollerStyle:(NSScrollerStyle)scrollerStyle {
return 0;
}
3 голосов
/ 28 сентября 2013

Это определенно ошибка в 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) При использовании устаревшего стиля отскок и импульс кажутся нарушенными.Это также частично нарушает код синхронизации прокрутки Apple *1017*.Это приводит к тому, что представления прокрутки сбрасывают позицию прокрутки, если одно из них NSScrollerStyleOverlay, а другое - NSScrollerStyleLegacy.Если прокручиваемое представление в стиле наложения прокручивается, тогда прокручивается устаревший стиль, оно сбрасывает оба вида прокрутки к верхнему смещению прокрутки y = 0.

[self.scrollView setHasVerticalScroller:YES];
[self.scrollView setScrollerStyle:NSScrollerStyleLegacy];
[self.scrollView setHasVerticalScroller:NO];
1 голос
/ 08 июля 2014

Да, это возможно.Попробуйте это вскоре после инициализации scrollView.

    self.scrollView.wantsLayer = YES;

Я получил это для работы, не скрывая подкласс NSScroller и не касаясь setHasVerticalScroller:.Кроме того, если self.scrollView является подклассом, который переопределяет drawRect:, попробуйте отключить его, чтобы убедиться, что то, что вы делаете, не вызывает проблемы.

1 голос
/ 23 июля 2011

Заставляет представление прокрутки не отображать скроллер и не реагировать на жестическую прокрутку:

-setHasHorizontalScroller:NO

Вызывает отображение отключенного скроллера, но реагирует на жестовую прокрутку:

-setHasHorizontalScroller:YES
-setHidden:YES
0 голосов
/ 17 мая 2011

Почему бы тебе просто не попробовать?

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

...