在 IOS 中使用自动布局在邻居之间居中视图
Posted
技术标签:
【中文标题】在 IOS 中使用自动布局在邻居之间居中视图【英文标题】:Centering View between neighbors using autolayout in IOS 【发布时间】:2013-07-16 22:51:19 【问题描述】:我正在尝试使用界面构建器中的约束(自动布局)来布局屏幕设计,并希望避免编码约束,但我猜我会接受任何一种情况的答案。
我在顶层视图中包含两个子视图。我想修复第一个子视图到屏幕顶部的垂直距离(我能够做到这一点 - 垂直空间约束的常见用例)。我希望第二个子视图浮动(垂直)在第一个子视图底部和屏幕底部之间的距离的中心。这个想法是,该设计对 iPhone 3.5" 和 4" 尺寸有所响应。
我无法定义一个或一组约束来实现这一点。
我尝试在第二个子视图与其邻居顶部(第一个子视图)和父视图底部之间的垂直间距约束上设置不等式,并使用这些约束的优先级。
在其他一些关于 SO 的相关帖子中提出的一个想法是使用一个固定到屏幕底部的容器,以及固定到第一个子视图的底部边缘,然后将我的第二个子视图居中容器中的子视图。如果可能,我希望避免使视图层次结构复杂化,但这可能不容易避免。
有什么想法或建议吗?
【问题讨论】:
在界面生成器中,您可能不得不使用容器。如果您愿意在代码中摆弄约束,则可以添加比例约束,因此您可以将顶部和底部空间设置为相等,这将实现您所追求的。 我只试了 10 分钟,但无法完成。也许只有我一个人,但到目前为止,我只发现了两种使自动布局在 IB 中工作的技术:1)随机提升、固定和删除东西,直到它意外地达到我想要的效果。过了一会儿,转到技巧 2),即放弃并编写代码。 您在上一段中提到的建议是最简单的方法。 【参考方案1】:更新
This answer 描述了如何在 Xcode 6.0 中执行此操作(并且可能适用于 Xcode 5.0 和 5.1)。
原创
如果您想使用自动布局执行此操作,则必须添加至少一个间隔视图。它不必是垂直居中视图(或任何其他视图)的父视图,因此它对视图层次结构的影响非常小。
我建议不要尝试在 Xcode 4.6.3 的 Interface Builder 中设置约束。这太痛苦了。但如果你真的必须这样做,这是可行的。
从 top-hugging 视图的底部边缘到 superview 的底部边缘创建一个间隔(一个普通的 UIView
)。将其设置为隐藏。将其约束到顶部拥抱视图以及根视图的左边缘和下边缘,并固定其宽度。我的间隔宽度是 10:
添加中间视图(此处为按钮)。给它一个“容器中的水平中心”约束。然后选择中间视图和间隔视图,并给它们一个“垂直中心”约束:
请注意,如果您在 IB 显示正确的指南时放下中间视图,它将为您设置这些约束。
您可以通过启用调整后代(但不是兄弟姐妹和祖先)的大小并调整 IB 中的根视图的大小来进行测试。中间视图将保持在顶部拥抱视图和父视图底部之间的中心:
【讨论】:
虽然这确实涉及层次结构中的额外视图,但它比我认为我必须做的要优雅一些。非常感谢。 在不平凡的情况下需要额外的辅助视图。约束表示两个属性之间的线性关系,所以如果你想要三个属性之间的关系,你必须使用多个约束来达到预期的效果。以上是关于在 IOS 中使用自动布局在邻居之间居中视图的主要内容,如果未能解决你的问题,请参考以下文章