Как я могу отключить вертикальную прокрутку NSScrollView?

Как я могу отключить вертикальную прокрутку NSScrollView?

Я не могу найти быстрое решение в Google.

Спасибо

4 ответа

Решение

Вы можете наблюдать смещение содержимого в scrollViewDidScroll: и установить значение x равным желаемому.

Редактировать: Хорошо, тогда. Вы видели это: ограниченная прокрутка?

Попробуйте это в подклассе NSScrollView:

- (void)scrollWheel:(NSEvent *)theEvent
{
    [super scrollWheel:theEvent];

    if ([theEvent deltaY] != 0.0)
    {
        [[self nextResponder] scrollWheel:theEvent];
    }
}

Также вы можете войти в систему по:

NSLog(@"user scrolled %f horizontally and %f vertically", [theEvent deltaX], [theEvent deltaY]);

Мне нравится ответ Ивана выше. Однако в моем конкретном случае у меня было табличное представление (вертикальная прокрутка), где каждая строка содержала представление коллекции (горизонтальная прокрутка).

Когда пользователи пытались прокрутить вверх / вниз, если на одном из представлений коллекции была наведена мышь, они не могли прокручивать вверх или вниз.

Чтобы решить эту проблему, я создал подкласс NSScrollView, который содержал NSCollectionViews, и переопределил этот метод следующим кодом:

override func scrollWheel(with event: NSEvent)
{
    if (fabs(Double(event.deltaY)) > fabs(Double(event.deltaX))) {
        self.nextResponder?.scrollWheel(with: event);
    } else {
        super.scrollWheel(with: event);
    }
}

Таким образом, он проверяет, выполняет ли пользователь преимущественно прокрутку в одном направлении, и обрабатывает его соответствующим образом.

Было интересно, если вы столкнулись

- (void)setHasVerticalScroller:(BOOL)flag;

отключить вертикальную полосу прокрутки?

Вы также можете установить это в Интерфейсном Разработчике.

Другие вопросы по тегам