AutoLayout 约束和 UIPopoverPresentationController
Posted
技术标签:
【中文标题】AutoLayout 约束和 UIPopoverPresentationController【英文标题】:AutoLayout constraints and UIPopoverPresentationController 【发布时间】:2016-06-23 18:38:49 【问题描述】:AutoLayout 似乎每一步都在与视图大小作斗争。
我有一个用于用户输入的视图控制器,AutoLayout 似乎坚定不移地决定让我的视图高 667 像素。
我玩过许多布局设置变体、许多内容拥抱和抗压缩组合,无论我做什么,AutoLayout 都能找到一种方法将视图拉伸到 667 像素高。
我使用 Reveal,这是一款显示布局框架、约束等的应用程序 (revealapp.com) 它向我展示了 UIPopoverPresentationController 正在添加自己的自动调整大小约束。
这是我的视图在呈现时的大致外观...
请注意,即使我将“接受”UIButton 设置为 30 像素高和 1000 优先级,AutoLayout 仍在拉伸它以满足其奇怪的 667 像素高要求。
当我运行应用程序时,我的弹出框看起来是这样的......
当我让 Reveal 检查正在运行的应用程序并将其缩小到弹出框时,这就是 Reveal 显示的内容...
注意 UIPopoverPresentationController 本身有这些约束。
如何控制 UIPopoverPresentationController 所设置的约束??
【问题讨论】:
您是否在呈现之前设置了弹出框的首选大小(不是在 nib 中,而是在代码中)? @Wyatt ...我没有设置它,但我怎么知道设置它的大小,因为我的弹出框大小会根据其内容而有所不同。在 IB 的上图中,文本框上方的这两个标签根据其内容动态调整大小,使得每次呈现时整体高度都不同。我应该如何计算高度? 【参考方案1】:尝试使用boundingRectWithSize(_:options:attributes:context:)
或NSString
来确定标签的高度。
完成此操作后,您可以通过添加标签创建的任何额外高度来预测弹出框的大小。您可以使用它来设置您正在呈现的视图控制器的preferredContentSize
属性。
【讨论】:
以上是关于AutoLayout 约束和 UIPopoverPresentationController的主要内容,如果未能解决你的问题,请参考以下文章
Autolayout约束动画化-Animating Autolayout Constraints