iOS 自动布局 - xib 中的等高约束

iOS auto layouts - Equal Height constraint in an xib

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

那么如何实现子视图高度与父视图高度成比例的约束(比如3:4)。

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

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

你不能这样做似乎很奇怪。这是一个解决方法。

  1. 将视图添加到顶级视图。
  2. 将其顶部、左侧、右侧和底部固定到顶级视图的顶部、左侧、右侧和底部。使所有偏移量为 0.
  3. 现在您可以向其添加视图并使用等高和等宽约束。

实际上你可以修改 xib 文件来实现这个。

在 subview.left 和 superview.left 之间创建一个 space 约束。保存 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 是这个约束的标识符,忽略它。)

看着眼熟?是的,如果你在情节提要中设置 "Equals Height" ,那么情节提要中的代码将非常相似。唯一的区别是attribute。现在将 attributeleading 修改为 width。现在的代码将是这样的

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

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

我不知道为什么不能在 Xcode 中执行此操作,也许这是一个错误,我不确定。

此技能未记录。无论如何,它有效。