iOS - 在iOS7上完成自动布局之前调用的viewDidLayoutSubviews

时间:2015-01-29 00:50:51

标签: ios ios7 autolayout

我们目前遇到的问题似乎只会影响iOS7设备。

在我们的.xib文件中,我们在容器视图中有两个视图(即:不在视图层次结构的顶层),需要显示为圆形。视图具有应用于它们在容器内的位置和水平间距的约束,以及需要它们是正方形的纵横比条件。在较大的屏幕尺寸上,视图应该在宽度/高度上扩展,这符合所描述的约束。

在我们的VC中,viewDidLayoutSubviews中有以下内容强制这些视图显示为圆形:

- (void)viewDidLayoutSubviews {
    self.progressContentContainerView.layer.cornerRadius = self.progressContentContainerView.frame.size.width/2;
}

这似乎在iOS8上运行良好,但是在iOS7上有一段时间后显示视图尚未应用约束且视图/视图的大小不正确(参见附件截图)。这会自行解决,并在半秒后正确呈现一个圆圈。这似乎只发生在我们打算成为循环的视图不在VC的视图层次结构的顶层时,这似乎意味着在子视图的子视图也被放置之前调用了viewDidLayoutSubviews进行。

Circle with incorrect cornerRadius Circle properly rendered after half a second

我的猜测是,我们可以通过为嵌套容器子类化UIView来修复此问题,在此子类中添加对圆形视图的引用,并在此处覆盖viewDidLayoutSubviews以进行cornerRadius调整。这似乎有点像解决方法,我有兴趣看看是否还有其他选择。

这个问题是否有更清洁/更惯用的解决方案?

1 个答案:

答案 0 :(得分:3)

我知道这是一个老问题,但你试过要么打电话:

[self.progressContentContainerView setNeedsUpdateConstraints];

或:

[self.progressContentContainerView layoutIfNeeded];