自动布局:涉及多个项目的约束

时间:2015-07-01 14:04:05

标签: ios objective-c cocoa-touch user-interface autolayout

例如,我希望某个文本字段位于导航栏下方,其距离等于超视图总高度的四分之一。这涉及三个项目:文本字段,顶部布局指南和超级视图。如何在Interface Builder中或通过编程创建这样的约束?

3 个答案:

答案 0 :(得分:1)

不可能使用一个约束。相反,您需要在文本字段上方创建额外的UIView。然后你可以设置以下约束:

  1. 4 * extraView.height = containerView.height
  2. extraView.top = topLayoutGuide
  3. extraView.bottom = textField.top

答案 1 :(得分:0)

每当你需要这样的东西,并且不想使用Benjamin的技术时,请使用相同宽度或高度约束的乘数属性到superview。

答案 2 :(得分:0)

我这样做的方法是使用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];

这应该将导航栏和文本字段之间的空间设置为超视图高度的四分之一。现在我不记得每次设备旋转时你是否必须重做这个布局,但我认为你不应该这样做。