Скрыть скроллеры, оставив прокрутку включенной в NSScrollView - PullRequest
9 голосов
/ 20 февраля 2012

Я хотел бы скрыть NSScroller с NSScrollView. Мне известны методы setHasHorizontalScroller: и setHasVerticalScroller:. Однако, если я отключу скроллеры, прокрутка в этом направлении также отключится. Я хотел бы только скрыть скроллеры, сохраняя возможность прокрутки. Есть мысли по этому поводу?

Ответы [ 6 ]

11 голосов
/ 10 июля 2013

Я смог сделать это, выполнив:

[labelsScrollView setHasHorizontalScroller:YES];
[[labelsScrollView horizontalScroller] setAlphaValue:0];
3 голосов
/ 07 июня 2018

Уловка установки alphaValue в zero имеет проблему, поскольку невидимый скроллер все еще получает прикосновения.Вот что мы сделали, чтобы решить эту проблему (Swift 4).

class InvisibleScroller: NSScroller {

   override class var isCompatibleWithOverlayScrollers: Bool {
      return true
   }

   override class func scrollerWidth(for controlSize: NSControl.ControlSize, scrollerStyle: NSScroller.Style) -> CGFloat {
      return CGFloat.leastNormalMagnitude // Dimension of scroller is equal to `FLT_MIN`
   }

   public override init(frame frameRect: NSRect) {
      super.init(frame: frameRect)
      setupUI()
   }

   private func setupUI() {
      // Below assignments not really needed, but why not.
      scrollerStyle = .overlay
      alphaValue = 0
   }
}

Использование:

private class TabBarScrollView: NSScrollView {

   private func setupUI() {

      borderType = .noBorder
      backgroundColor = .clear
      drawsBackground = false

      horizontalScrollElasticity = .none
      verticalScrollElasticity = .none

      automaticallyAdjustsContentInsets = false
      horizontalScroller = InvisibleScroller()
   }
}
1 голос
/ 02 августа 2018
if collectionView.enclosingScrollView?.hasHorizontalScroller == true {
        collectionView.enclosingScrollView?.horizontalScroller?.scrollerStyle = .overlay
        collectionView.enclosingScrollView?.horizontalScroller?.alphaValue = 0.0
    } else {
        print("horizontalScroller")
    }

Убедитесь, что выбран горизонтальный скроллер:

enter image description here

0 голосов
/ 31 августа 2017

Это мое решение из ответа Сэма выше:

[myNSScrollView setHasVerticalScroller:YES];
[_myNSScrollView setScrollerInsets:NSEdgeInsetsMake(0, 0, 0, -99999)];

Скроллер будет скрыт даже во время процесса прокрутки.

0 голосов
/ 26 марта 2016

Я также ищу ответ на этот вопрос, поскольку настройка hasVerticalScroller = false отключает прокрутку трекпада для меня.Тем временем мой ужасный хак - использовать следующее в моем подклассе NSScrollView:

self.hasVerticalScroller = true
self.scrollerInsets.right = -999999

Технически виден скроллер, он совсем далеко от края представления.(

0 голосов
/ 20 февраля 2012

Вы проверяли Ссылку класса NSScrollView ?

[scrollView setHasVerticalScroller:NO];

, этот метод не отключает прокрутку.

Если вы все еще не хотитеиспользовать этот метод вы также можете:

[scrollView setHorizontalScroller:nil];
...