问题描述
我以编程方式创建了一个UIView并将NSLayoutConstraint添加到它并且它可以工作,然后将其添加为视图控制器视图的子视图。现在我需要从superview中删除这个视图,一段时间后再添加它。但是如果我使用 self.view addSubview
再次添加它,布局将不再起作用。如何使布局再次工作?
I created a UIView programatically and add NSLayoutConstraint to it and it works and then add it as a subView of view controller's view. Right now I need to remove this view from superview and some time later add it again. But the layout won't work any more if I add it again using self.view addSubview
. How to make the layout works again?
推荐答案
在自动布局中添加和删除视图时,需要注意一些要点。
You need to take care of some points while adding and removing views from auto layout.
UIView.h中有两种方法
class
// Allows you to perform layout before the drawing cycle happens.
// -layoutIfNeeded forces layout early
- (void)setNeedsLayout;
- (void)layoutIfNeeded;
根据您的要求使用这些方法。所以我建议你什么时候从视图中删除子视图,如果需要更新上级视图的约束。然后调用以下方法来反映布局更改。
Use these methods as per your requirement. So i suggest when ever you remove subview from view, Update constraint of superior view if it is required. And then call below method to reflect layout changes.
[self.view layoutIfNeeded];
大多数情况上面的方法将解决所有与布局相关的问题。但是,如果复杂结构存在,那么我的意思是运行时改变视图的行为。
Most cases above method will solve all layout related issues. However some time if complex structure is there i mean runtime changing behaviour of views.
然后在 UIViewController
中覆盖以下方法,在此方法中执行所有与帧相关的更改。
Then override below method in your UIViewController
, Perform all frame related changes in this method.
- (void)viewDidLayoutSubviews
这篇关于UIView addSubview自动布局无法正常工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!