iOS自动布局 - xib中的Equal Height约束

时间:2015-01-23 17:50:15

标签: autolayout

我有一个xib,我在主视图中添加了一个UIView作为子视图。我希望这个子视图与主视图成比例高度。但是没有'Equals Height'选项可以做到这一点。如果它是故事板中的视图控制器,我本来可以做到这一点。

enter image description here

那么如何实现一个约束,其中子视图的高度是superview的高度比例(比如3:4)。

3 个答案:

答案 0 :(得分:1)

您无法做到这一点似乎很奇怪。这是一种解决方法。

  1. 将视图添加到顶级视图。
  2. 将其顶部,左侧,右侧和底部固定到顶层视图的顶部,左侧,右侧和底部。使所有偏移量为0。
  3. 现在,您可以为此添加视图,并按预期使用“等高”和“等宽”约束。
  4. enter image description here

答案 1 :(得分:0)

我认为在这种情况下只能以编程方式完成。

- (void)viewDidLayoutSubviews {
   self.scannedDetailsCardHeightConstraint.constant = self.view.frame.size.height*(0.4);    
   [self.view layoutSubviews];}

答案 2 :(得分:0)

实际上,您可以修改xib文件以实现此目的。

在subview.left和superview.left之间创建空间约束。保存xib并在Sublime(或其他编辑器)中打开它。代码就像

<constraint firstItem="Tnc-ek-Ibw" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" id="1Go-h7-fVl"/>

Tnc-ek-Ibw是您的子视图的标识符,iN0-l3-epB是超级视图。(1Go-h7-fVl是此约束的标识符,请忽略它。)

看起来很熟悉?是的,如果您在故事板中设置“等于高度”,那么故事板中的代码将非常相似。唯一的区别是 attribute 。现在将attributeleading修改为width。现在的代码将是这样的

<constraint firstItem="Tnc-ek-Ibw" firstAttribute="width" secondItem="iN0-l3-epB" secondAttribute="width" id="1Go-h7-fVl"/>

保存并在Xcode中重新打开它。它有效!

我不知道为什么不能在Xcode中做到这一点,也许这是一个bug,我不确定。

此技能无证。无论如何,它有效。