【问题标题】:iOS - viewDidLayoutSubviews called before auto-layout completed on iOS7iOS - 在 iOS7 上完成自动布局之前调用 viewDidLayoutSubviews
【发布时间】:2015-03-28 02:52:12
【问题描述】:

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

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

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

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

这似乎在 iOS8 上运行良好,但在 iOS7 上,在显示视图后的一段时间内,尚未应用约束并且视图/视图的大小不正确(请参阅随附的屏幕截图)。这会自行解决并在半秒后正确渲染一个圆圈。只有当我们打算循环的视图不在 VC 视图层次结构的顶层时才会出现这种情况,这似乎意味着在子视图的子视图也被布置之前调用了 viewDidLayoutSubviews

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

对于这个问题有更简洁/更惯用的解决方案吗?

【问题讨论】:

  • 我也有类似的问题

标签: ios ios7 autolayout


【解决方案1】:

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

[self.progressContentContainerView setNeedsUpdateConstraints];

或:

[self.progressContentContainerView layoutIfNeeded];

【讨论】:

  • 只是为了保持每年一月份的活动 - layoutIfNeeded 是我一直在寻找的。​​span>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多