iOS 8 上未返回正确的自动布局宽度

Posted

技术标签:

【中文标题】iOS 8 上未返回正确的自动布局宽度【英文标题】:Correct autolayout width not being returned on iOS 8 【发布时间】:2016-06-03 11:23:46 【问题描述】:

我试图在自定义UITableViewCell 中获取UIView 的宽度,以便对其外观进行一些更改。我正在使用自动布局,但是,返回的视图的宽度是在 xib 文件中定义的。这与自动布局布局单元格后的实际宽度不同。

我的代码在layoutSubviews():

override func layoutSubviews() 
    super.layoutSubviews()
    print(backgroundView.frame.width)

这在 ios 9 中有效,但在 iOS 8 中无效。调用 self.setNeedsLayout()self.layoutIfNeeded() 无效。我可以在哪里移动代码以使其显示正确的宽度?

谢谢。

【问题讨论】:

如果单元格宽度覆盖整个宽度以使用UIScreen.mainScreen().bounds.width,或者考虑到您拥有的填充进行一些计算,则可以快速解决。 @iphonic 它确实有一些填充但是是的,这可能是一个选项.. 只是想知道是否有更好的方法 可能是this可以帮到你。 另外,如果我拉刷新然后它工作 【参考方案1】:

我以前遇到过这个问题,如果我没记错的话,这与 iOS 直到第一次绘制视图后才知道实际大小有关。我们能够通过在 viewDidAppear 之后刷新来更新它(就像你提到的那样,刷新后它是适当的大小),但这并不是最好的解决方案。

您可以尝试的其他方法是将约束出口添加到您在进行单元设置时操作的单元。例如,如果您需要 UI 元素在某些情况下具有特定宽度,但在其他情况下不需要,您可以添加一个宽度约束来更改其值。这使您的其他元素可以根据视图中的其他约束调整自己的大小。这里的限制是您需要事先知道其中一个元素的宽度。

【讨论】:

以上是关于iOS 8 上未返回正确的自动布局宽度的主要内容,如果未能解决你的问题,请参考以下文章

自动首选最大布局宽度在 8.0 之前的 iOS 版本中不可用

ios自动布局:动态宽度应该用SnapKit下推第二个标签,正确的方法

iOS 自动布局:3 列标签布局,中间列具有可变宽度

IOS 8 图像缩放和自动布局

iOS 自动布局 ios 7 与 ios 8

iOS 8 自定义键盘自动布局键