在 ViewDidLayoutSubviews 中定义的框架位置不正确

Incorrect Frame Position when defined in ViewDidLayoutSubviews

我在 ovalView 中有一个 imageView 受自动布局约束。

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

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

标签的框架与 imageView 略微偏离中心。

但是,如果我将上面的代码移到 viewDidAppear() 中,标签会完美地居中于 imageView,但用户会看到不希望看到的变化。

如何将我的代码保存在 viewDidLayoutSubviews() 中并使其正常工作?

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

对于可能面临类似问题的其他人。通过添加

,我能够将我的代码保留在 viewDidLayoutSubviews()
self.view.layoutIfNeeded() 

在我的代码中

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