水平 UIStackView 中 UISlider 的高度

height of UISlider in a horizontal UIStackView

UIStackView中横轴排列的子视图必须与UIStackView的高度相同。然而,对于 UISlider 来说,情况并非如此。无论我为 UIStackView 设置的高度如何,堆栈视图中 UISlider 的高度都会高出 1px。

我将 UIStackView 的高度设置为 40,并且没有为 UISlider 设置任何自动布局。

但是 UISlider 的高度是 41,我预计是 40。

有什么原因吗?以及解决此问题的任何方法?

UISlider 似乎在调整大小方面做了一些奇怪的事情。

暂时忽略堆栈视图,如果您简单地将宽度和高度约束应用于 UISlider,它们将不匹配 实际 的宽度和高度运行-时间。您将获得额外的 4-pts 宽度和额外的 1-pt 高度。

不过...

如果相对于滑块约束另一个视图,则另一个视图尊重滑块的约束,而不是滑块的呈现大小。

从调试视图层次结构中查看此图像捕获:

  • 滑块有
    • 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 磅 - 这与 约束条件 相匹配。

另请注意,标签框架 与滑块背景 2-pts 重叠 ,表明标签 x 定位再次与 匹配约束,而不是渲染的滑块视图框架。

如果在滑块嵌入 UIStackView 时检查视图,您会看到(好吧,您 已经 看到)框架大小大于堆栈视图的框架。但是,滑块的框架将 扩展到堆栈视图的实际框架之外 ...堆栈视图(及其其他排列的子视图)将继续遵守您给它的约束。

所有这些都是说...如果 "size mismatch" 没有引起任何问题,我就不会担心。