如何在 Xcode 中成功使用 AutoLayout 和 Constraints?

Posted

技术标签:

【中文标题】如何在 Xcode 中成功使用 AutoLayout 和 Constraints?【英文标题】:How do I successfully use AutoLayout and Constraints in Xcode? 【发布时间】:2014-08-20 06:42:10 【问题描述】:

如果没有发布图片所需的代表,这将很困难......但是......

我目前在 Xcode 中有一个故事板布局。

我有一个 UIViewController,它分为两个部分,上层 UIView 和下层 UITableView(现在,我们可以忽略这一点,但同样的问题也适用于表格视图,我们也非常感谢您的建议)

在 UIView 中,我有一个 ProgressView,它跨越 UIView 的整个宽度,并与视图边缘的填充距离对齐。 ProgressView 设置为 50%,位于故事板设计器的布局中间。

模拟时,进度条似乎远高于 90%。问题是,当进度条缩小(或在情节提要布局编辑器中更改宽度)到“可见布局”的一半左右时,进度条占据了模拟屏幕的“大部分”,并正确显示了 50% 的进度。

我假设这与 AutoLayout 或 Size Classes 有关。我想正确地学习这个自动布局和约束的使用——因此,禁用其中任何一个都是不可接受的。建议的约束没有返回我的预期结果。

编辑:我想出了一些似乎可以令人满意的工作,请参阅给定的答案。但仍然渴望看到一些实际的布局建议。

编辑:将同样的原理应用到 UIViewController 下半部分的 UITableView 中,也修复了 Separator Insets 的问题。

【问题讨论】:

【参考方案1】:

我找到了一种解决方案。

在故事板编辑器中,打开文档大纲。 按住右键选择ProgressView拖到Parent UIView,松开选择:

引领空间走向容器 到容器的尾随空间 在容器中水平居中

(在这里完成仍然有问题,因为 UIView 仍然超出其父级的宽度......所以对 UIView 做同样的事情)

在文档大纲中,在UIView上按住鼠标右键拖动到Parent View,松开并选择: - 引领空间到集装箱 - 容器的尾随空间

现在,我有一个完全居中的 ProgressView,它位于两个边缘之间,两端都有“填充”。正是需要的。

这个问题似乎源于使用嵌套的 UIView。

【讨论】:

以上是关于如何在 Xcode 中成功使用 AutoLayout 和 Constraints?的主要内容,如果未能解决你的问题,请参考以下文章

如何清理 xcode 构建缓存?

如何在 Xcode8 中手动触发 NSManagedObject 子类的生成

UIImageView 高度不是自动布局约束后子图像高度的高度。

如何在 Xcode 9 中使用 iOS 11、Apple TV 4K 等进行无线调试?

如何在命令行中捕获 OCUnit 的测试失败/成功?

如何将 Xcode 与克隆的 git 存储库一起使用