NSScrollView:覆盖系统显示设置?

Cai*_*Cai 6 macos cocoa objective-c nsscroller nsscrollview

我有一个NSScrollView,它被设置为:

MyNSScrollView.hasHorizontalScroller = YES;
MyNSScrollView.hasVerticalScroller = YES;
MyNSScrollView.autohidesScrollers = YES;
MyNSScrollView.scrollerStyle = NSScrollerStyleOverlay;
Run Code Online (Sandbox Code Playgroud)

我注意到,如果没有触控板连接到 OS X,并且默认情况下,NSScrollView它将忽略我在代码中的设置并强制滚动条始终显示:

设置

我只能将我的系统设置更改为“滚动时”或设置hasHorizontalScroller等NO以隐藏它,后者将禁用鼠标滚动,这不是我想要的结果。

默认情况下(自动基于鼠标或触控板)如果用户没有触控板,即使内容大小不超过框架大小,也将始终显示滚动条。但是如果你有一个触控板,它将是覆盖样式,无论滚动条是否显示,它都在内容之上。

两者之间的区别在于“传统”样式将占用滚动视图中的空间。如果您要传递visiableRect计算值,或者您的内容需要通过约束保持一定的纵横比,这将是一个问题。

有没有办法强制隐藏它们而不禁用它们?

Ken*_*ses 1

您还不清楚具体在什么情况下会出现什么症状。例如,该首选项窗格中“显示滚动条:”的正常设置是什么?您希望滚动条的行为是什么?始终可见?只在滚动时显示?

无论如何,我认为问题在于你只是误解了它的作用autohidesScrollers。将其设置为 true 只是意味着当文档视图未超出剪辑视图(也称为内容视图)的边界时,滚动条将被隐藏。也就是说,如果没有地方可以滚动,因为所有内容都已经显示了。

该属性与滚动条始终可见或仅在滚动或其他情况下可见无关。这是一个系统设置,您无法以编程方式覆盖。在用户会话中的所有应用程序中,所有滚动条的行为都相同。