ScrollView.scrollIndicatorInsets 实际上是如何工作的?
如果将所有插入设置为默认值 0,并且进行一些调试,您实际上会发现滚动条默认情况下并不完全靠近底部或右边缘。
ScrollView.scrollIndicatorInsets = UIEdgeInsets.init(top: 0, left: 0, bottom: 0, right: 0)
正如您所看到的,滚动条和 ScrollView 边缘之间有一些额外的间距。
有什么方法可以通过编程将滚动条左下角精确地放置在 View 的左下角吗?我不想硬编码任何东西,我希望它可以在任何 ScrollView 大小和屏幕。
插图实际上指定了什么(是的,我知道它们为滚动条指定了一个矩形)? iOS 使用的滚动条是否有默认的边缘间距,我必须考虑到这一点?滚动条的图层 View 上是否有发光,因此有间距?
编辑:
我使用非常规方法解决了这个问题,方法是从滚动条本身(subviews.last)访问 UIView,并使用最小尺寸(即厚度)。
最佳答案
快速检查显示,插入设置为 UIEdgeInsetsZero
(默认)的滚动指示器将它们放置在距边缘 3 磅的位置。
您可以尝试使用:
theScrollView.scrollIndicatorInsets = UIEdgeInsets.init(top: -3, left: -3, bottom: -3, right: -3)
其中应该将水平指示器与底部对齐,并与左边缘和右边缘齐平,垂直指示器与右侧齐平,并与顶部边缘和底部边缘齐平。
您可能想先获取框架,因为它可能因设备/尺寸/iOS版本而异。
编辑:
一些澄清说明...
滚动指示器
是 ImageView 。您可以通过检查 ScrollView 的 subview (代码或使用调试 View 层次结构)来找到它们。
默认插入(零)将这些 ImageView 放置在距 ScrollView 框架边缘 3 分的位置。
对于300 x 500
ScrollView ,垂直指示器的原点是:
x:294.5 y:3.0 with a width of 2.5
294.5 + 2.5 == 297
// 3-pts from the right edge, 3-pts from the top
水平指示器的原点是:
x:3.0 y:494.5 with a height of 2.5
494.5 + 2.5 == 497
// 3-pts from the left edge, 3-pts from the bottom
所以,使用:
.scrollIndicatorInsets = UIEdgeInsets.init(top: -3, left: -3, bottom: -3, right: -3)
将原点移至
// vertical
x:297.5 y:0.0 with a width of 2.5
297.5 + 2.5 == 300
// flush to top and right edges
// horizontal
x:0.0 y:497.5 with a height of 2.5
497.5 + 2.5 == 500
// flush to left and bottom edges
我认为 future 可能会发生变化。随着越来越少的人使用小屏幕设备,Apple可以将宽度/高度更改为 3 或 3.5 或其他值,并且可以将默认插入值从 3 更改为其他值。这就是为什么我说您可能希望让帧获得正确的插入值,而不是将它们硬编码为 3
。
但奇怪的是,直到指示器框架被绘制到屏幕上 - 无论是通过闪烁它们还是实际滚动内容 - 它们的框架都设置为 7 磅高度(对于垂直指示器)和 7 磅宽度(水平),并位于右下角。
因此,对于 500 x 300
ScrollView 框架,指示器框架最初为:
// vertical
x:294.5 y:490.0 w:2.5 h:7.0
// horizontal
x:290.0 y:494.5 w:7.0 h:2.5
这仍然告诉你他们距边缘 3 分,但还不太清楚......再说一次,不能保证将来不会改变。
如果您确实希望确保指示器会出现在您想要的位置,那么最好的选择可能是使用自定义 View 而不是内置指示器。
关于ios - 将 UIScrollView scrollIndicatorInsets 定位到边缘,没有间距?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52925547/