例如,我希望将某个文本字段放置在导航栏下方,距离等于超级视图总高度的四分之一。这涉及三个项目:文本字段、顶部布局指南和超级视图。如何在接口生成器中或通过编程创建这样的约束?
不可能只使用一个约束。相反,您需要在文本字段上方创建一个额外的UIView
。然后您可以设置以下限制:
- 4*extraView.height=容器视图.height
- extraView.top=top布局指南
- extraView.bottom=textField.top
每当您需要这样的东西,并且不想使用Benjamin的技术时,请对超视图使用等宽或等高约束的乘数属性。
我的方法是使用constraintsWithVisualFormat。像这样:
double quarterSuperViewHeight = superView.frame.size.height / 4;
NSDictionary* metrics = NSDictionaryOfVariableBindings(quarterSuperViewHeight);
NSDictionary* views = NSDictionaryOfVariableBindings(textField, navigationBar);
[superView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"[navigationBar]-quarterSuperViewHeight-[textField]" options:0 metrics:metrics: views:views];
这应该将导航栏和文本字段之间的空间设置为超级视图高度的四分之一。现在我不太记得每次设备旋转时你是否必须重做这个布局,但我认为你不应该。