在 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)
我在 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)