使用Autolayout时应该在哪里手动添加子视图
Where should I manually add subviews when using Autolayout
我试图强迫自己开始在所有地方使用 AutoLayout。我有一个使用框架非常简单的场景,但我无法使用 Autolayout 使其工作。
我有一个 StoryBoard,我不能碰它,因为它属于图书馆。当与故事板相关的 ViewController 加载时,我想以编程方式添加一个视图。所以我在 viewDidLoad
中创建了一个 UIView
,添加了高度和宽度的约束以及另外两个约束来定位它们。一切都很好,但宽度,我想要与其他视图具有相同的宽度。我应该怎么做?
我在viewDidLoad
中记录了"other view"的大小,但大小不对,我也记录了self.view.frame.size.width
,也不正确。
我读到直到 viewDidLayoutSubviews
才设置正确的大小,所以我尝试在那里添加我的代码,但我陷入了对 viewDidLayoutSubviews
的调用循环,该循环永远不会结束。我做错了什么?
尝试将代码放入 viewDidAppear
。检查子视图是否已经是视图的后代,如果不是,则添加带有约束的子视图。
UIViewController的这个方法你肯定可以用,
- (void)updateViewConstraints
{
[super updateViewConstraints] ;
// now update your subviews contraints or log your view sizes
}
由于您正在使用基于约束的布局并希望根据 UIViewController 的约束更新子视图约束,因此您应该始终使用以下方法。
如果您希望两个视图具有相同的宽度,您应该使用
constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant:
。您可以在 viewDidLoad 中执行此操作。
NSLayoutConstraint *widthCon = [NSLayoutConstraint constraintWithItem:view1 attribute:NSLayoutAttributeWidth relatedBy: NSLayoutRelationEqual toItem:view2 attribute:NSLayoutAttributeWidth multiplier:1 constant:0];
这假定来自库情节提要的视图是使用约束创建的。
我试图强迫自己开始在所有地方使用 AutoLayout。我有一个使用框架非常简单的场景,但我无法使用 Autolayout 使其工作。
我有一个 StoryBoard,我不能碰它,因为它属于图书馆。当与故事板相关的 ViewController 加载时,我想以编程方式添加一个视图。所以我在 viewDidLoad
中创建了一个 UIView
,添加了高度和宽度的约束以及另外两个约束来定位它们。一切都很好,但宽度,我想要与其他视图具有相同的宽度。我应该怎么做?
我在viewDidLoad
中记录了"other view"的大小,但大小不对,我也记录了self.view.frame.size.width
,也不正确。
我读到直到 viewDidLayoutSubviews
才设置正确的大小,所以我尝试在那里添加我的代码,但我陷入了对 viewDidLayoutSubviews
的调用循环,该循环永远不会结束。我做错了什么?
尝试将代码放入 viewDidAppear
。检查子视图是否已经是视图的后代,如果不是,则添加带有约束的子视图。
UIViewController的这个方法你肯定可以用,
- (void)updateViewConstraints
{
[super updateViewConstraints] ;
// now update your subviews contraints or log your view sizes
}
由于您正在使用基于约束的布局并希望根据 UIViewController 的约束更新子视图约束,因此您应该始终使用以下方法。
如果您希望两个视图具有相同的宽度,您应该使用
constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant:
。您可以在 viewDidLoad 中执行此操作。
NSLayoutConstraint *widthCon = [NSLayoutConstraint constraintWithItem:view1 attribute:NSLayoutAttributeWidth relatedBy: NSLayoutRelationEqual toItem:view2 attribute:NSLayoutAttributeWidth multiplier:1 constant:0];
这假定来自库情节提要的视图是使用约束创建的。