【问题标题】:height of UISlider in a horizontal UIStackViewUISlider 在水平 UIStackView 中的高度
【发布时间】:2019-08-21 21:03:09
【问题描述】:
UIStackView 中的水平轴排列的子视图必须与UIStackView 的高度相同。但是,UISlider 并非如此。无论我为UIStackView 设置什么高度,堆栈视图中UISlider 的高度都会高出1px。
我将UIStackView 的高度设置为40,并且没有为UISlider 设置任何自动布局。
但是UISlider 的高度是 41,我预计是 40。
这有什么原因吗?有什么方法可以解决这个问题?
【问题讨论】:
标签:
ios
uistackview
ios-autolayout
【解决方案1】:
UISlider 的大小似乎做了一些奇怪的事情。
暂时忽略堆栈视图,如果您只是对UISlider 应用宽度和高度约束,它们将与运行时的实际 宽度和高度不匹配。你会得到一个额外的4-pts 宽度和一个额外的1-pt 高度。
但是...
如果您相对于滑块约束另一个视图,则另一个视图尊重滑块的约束,而不是滑块的渲染大小。
看看这个来自 Debug View Hierarchy 的图像捕获:
但橙色矩形(滑块背景)实际上是 104 x 41 - 如果您在运行时 print(mySlider.frame),这就是您将得到的。
-
左标签有
trailing = slider.leading
-
height = slider.height
centerY = slider.centerY
-
右标签有
leading = slider.trailing
-
height = slider.height
centerY = slider.centerY
两个标签高度都正好是 40-pts - 这与 约束 相匹配。
还请注意,标签框重叠滑块背景2-pts,表明标签x-positioning再次匹配约束,而不是渲染滑块视图框架。
如果您在滑块嵌入UIStackView 时检查视图,您会看到(嗯,您已经看到)框架大小大于堆栈视图的框架。但是,滑块的框架将超出堆栈视图的实际框架...堆栈视图(及其其他排列的子视图)将继续尊重您给它的约束。
所有这些都是说......如果“尺寸不匹配”没有引起任何问题,我不会担心。