1

我有一个受自动布局约束的imageView内部。ovalView

在里面viewDidLayoutSubviews(),我正在创建一个 UILabel

let label = UILabel(frame: imageView.frame)
imageView.superview?.addSubview(label)

标签的框架显示与 imageView 稍微偏离中心。

但是,如果我将上面的代码移到里面viewDidAppear(),标签完全以 imageView 为中心,但用户会看到不希望出现的变化。

如何保存我的代码viewDidLayoutSubviews()并使其工作?

4

2 回答 2

1

viewDidLayoutSubviews被调用时,您不能假设您的视图在调用该方法之前具有它们的最终帧。在你的情况下,这就是发生的事情。当您调用时,viewDidAppear您的视图已经绘制了所有框架,并且您得到了正确的框架,这就是它适合您的原因。所以viewDidAppear改为调用它。

于 2017-10-13T18:53:14.360 回答
1

对于其他可能面临类似问题的人。我能够viewDidLayoutSubviews()通过添加来保留我的代码

self.view.layoutIfNeeded() 

在我的代码之后

let label = UILabel(frame: imageView.frame)
imageView.superview?.addSubview(label)
于 2017-10-17T12:03:28.473 回答