MKKRightToLeftScrollView 0.1.0

MKKRightToLeftScrollView 0.1.0

测试已测试
语言语言 Obj-CObjective C
许可证 MIT
发布上次发布2017 年 8 月

Abdullah Arif 维护。




MKKRightToLeftScrollView 在 macOS 上横向反转滚动条。这意味着垂直滚动条将出现在左侧而不是右侧。

这对于从右到左的文本非常有用,例如阿拉伯文的 NSTextView

在 macOS 10.12 中,水平反转滚动条是原生实现的,但需要将 [NSApp userInterfaceLayoutDirection] 设置为 NSUserInterfaceLayoutDirectionRightToLeft,这不可通过编程控制。

换句话说,应用程序的 userInterfaceLayoutDirection 会影响应用程序中所有的 NSScrollView,这对于大多数用例来说并不是很理想。

此外,原生实现没有正确地镜像垂直滚动条。

代码子类化了 NSScrollViewNSScroller。还有一个可选的,但推荐的,私有方法 swizzling 在 NSOverlayScrollerImp 上。

macOS 10.10 中引入的 contentInsets 也得到支持。

此代码最初是为 Katib 创建的。

许可证

代码在 MIT 许可证下发布。有关详细信息,请参阅 LICENSE。

macOS 版本兼容性

最低 macOS 10.8。虽然在 10.7 上也可能工作,但尚未进行测试。

用法

在 Interface Builder 中,找到滚动视图,在身份检查器中将类设置为 MKKRightToLeftScrollView。此外,将两个滚动条类都设置为 MKKRightToLeftScroller,虽然这不是强制性的,但更高效。

默认情况下,已启用 rightToLeftLayout。这也可以在 IB 的属性检查器中或通过编程方式修改。

要编程创建 MKKRightToLeftScrollView,请参阅 Apple 关于此主题的指南,但将每个 NSScrollView 替换为 MKKRightToLeftScrollView

私有类的 Method swizzling

由于 NSScroller 的 NSScrollerImp 类中存在一些相当不幸的私有实现问题,因此重写 [NSScroller rectForPart:] 不会影响私有实现用于覆盖样式滚动条的图层矩形。

这一副作用是垂直滚动条在scrollView边缘出现偏移量超过预期,并且在尝试重新定位滚动条框架或绘图坐标时出现剪辑伪影。

我们在NSScroller+MKKRightToLeftInsets.{h|m}中重写了[NSOverlayScroller _unsafeRectForPart:]。如果您的应用程序因某些原因被拒绝或您不希望对私有类进行swizzle,请删除这些文件。将采取一个不是很理想的后备方案,但视觉结果应该是一样的。请查阅代码以获取详细信息。

支持

https://github.com/aiaf/MKKRightToLeftScrollView/issues