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

10

我们目前存在一个问题,似乎只影响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调整。但这似乎有点绕,我想知道是否有其他选项。

是否有更清晰/更典型的解决方案?


我遇到了类似的问题。 - d0n13
1个回答

3

我知道这是一个老问题,但你是否尝试过调用以下任一方法:

[self.progressContentContainerView setNeedsUpdateConstraints];

或者:

[self.progressContentContainerView layoutIfNeeded];

1
为了保持每年一月的活动,我找到了layoutIfNeeded - Adam Johns

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接