UISlider 在水平 UIStackView 中的高度
Posted
技术标签:
【中文标题】UISlider 在水平 UIStackView 中的高度【英文标题】:height of UISlider in a horizontal UIStackView 【发布时间】:2019-08-21 21:03:09 【问题描述】:UIStackView
中的水平轴排列的子视图必须与UIStackView
的高度相同。但是,UISlider
并非如此。无论我为UIStackView
设置什么高度,堆栈视图中UISlider
的高度都会高出1px。
我将UIStackView
的高度设置为40,并且没有为UISlider
设置任何自动布局。
但是UISlider
的高度是 41,我预计是 40。
这有什么原因吗?有什么方法可以解决这个问题?
【问题讨论】:
【参考方案1】:UISlider
的大小似乎做了一些奇怪的事情。
暂时忽略堆栈视图,如果您只是对UISlider
应用宽度和高度约束,它们将与运行时的实际 宽度和高度不匹配。你会得到一个额外的4-pts
宽度和一个额外的1-pt
高度。
但是...
如果您相对于滑块约束另一个视图,则另一个视图尊重滑块的约束,而不是滑块的渲染大小。
看看这个来自 Debug View Hierarchy 的图像捕获:
滑块有width = 100
height = 40
但橙色矩形(滑块背景)实际上是 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
时检查视图,您会看到(嗯,您已经看到)框架大小大于堆栈视图的框架。但是,滑块的框架将超出堆栈视图的实际框架...堆栈视图(及其其他排列的子视图)将继续尊重您给它的约束。
所有这些都是说......如果“尺寸不匹配”没有引起任何问题,我不会担心。
【讨论】:
以上是关于UISlider 在水平 UIStackView 中的高度的主要内容,如果未能解决你的问题,请参考以下文章
当其他元素太宽时,在水平 UIStackview 中看不到标签
UIScrollView 内的水平 UIStackView 不滚动