【问题标题】: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 的图像捕获:

    • 滑块有
      • 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 时检查视图,您会看到(嗯,您已经看到)框架大小大于堆栈视图的框架。但是,滑块的框架将超出堆栈视图的实际框架...堆栈视图(及其其他排列的子视图)将继续尊重您给它的约束。

    所有这些都是说......如果“尺寸不匹配”没有引起任何问题,我不会担心。

    【讨论】:

      猜你喜欢
      • 2018-06-07
      • 2018-04-20
      • 2018-08-16
      • 2021-06-11
      • 2020-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多