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

Posted

技术标签:

【中文标题】iOS 自动布局 - xib 中的等高约束【英文标题】:iOS auto layouts - Equal Height constraint in an xib 【发布时间】:2015-01-23 17:50:15 【问题描述】:

我有一个 xib,我在主视图中添加了一个 UIView 作为子视图。我希望这个子视图与主视图的高度成比例。但是没有“等高”选项可以做到这一点。如果它是情节提要中的视图控制器,我将能够做到这一点。

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

【问题讨论】:

设置顶部空间和底部空间约束并调整它们的值,直到比例看起来不错。 我能做到。但是屏幕尺寸会随着不同的 iPhone 而变化。设置一个比例本来是完美的方式。 屏幕尺寸会随着 iPhone 型号的不同而变化。正确的。但是,如果您设置了正确的约束,即使UIView 也会相应地发生变化。而且它在每台设备上看起来都不同。 查看我为您制作的演示:dropbox.com/s/aecn78q6bsyb06g/Demo.zip?dl=0。 目前无法打开 Dropbox,稍后再检查。感谢您提出。 【参考方案1】:

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

    向顶层视图添加视图。 将其顶部、左侧、右侧和底部固定到顶层视图的顶部、左侧、右侧和底部。使所有偏移量为 0。 现在您可以为此添加一个视图,并按照您的预期使用等高和等宽约束。

【讨论】:

所以我需要为此添加另一个***视图?除了另一个观点,这将是“文档大纲”中的许多额外约束。以编程方式执行它似乎要简单得多。 只有 4 个额外的约束。确实不错,但有一个选择很好。 设置完成后,您只需忽略顶层视图并将所有内容都放在第二个视图中。 谢谢 :) 但它实际上很混乱。想象一下这个视图实际上有许多其他子视图的情况。 Xcode 应该允许以简单的方式来做。【参考方案2】:

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

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

【讨论】:

只需将其标记为答案,因为以编程方式执行似乎要好得多。【参考方案3】:

其实你可以通过修改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 中做到这一点,也许这是一个错误,我不确定。

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

【讨论】:

以上是关于iOS 自动布局 - xib 中的等高约束的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ios swift 中以编程方式创建自动布局等宽约束?

将自动布局(约束)从 xib/storyboard 转换为代码? [关闭]

iOS 约束 代码自动布局 正方形控件

自动布局视图 xib - 没有可编辑的约束?我需要居中的元素

将自动布局(约束)从xib / storyboard转换为代码? [关闭]

UITableViewHeaderFooterView 不支持笔尖中的自动布局约束