具有动态大小的ios自动布局
Posted
技术标签:
【中文标题】具有动态大小的ios自动布局【英文标题】:ios auto layout with dynamic size 【发布时间】:2017-01-05 17:51:28 【问题描述】:我的UIViewController
中有一个视图,它有 4 个约束:左、右和底部的空格为 0,并且它有纵横比。它看起来像这样:
______ _
| | \
| | |
| | |- ViewController
| | |
|______| |
|______| <- View _/
我想在UIView
的中心插入一个具有动态大小的ImageView
,并且我希望它保持在中心。我在代码中做了这个调整大小,但现在我想用 Auto-Layout 将它居中,但是当我水平和垂直居中时,它告诉我我需要对 ImageView
的大小进行更多限制。
我应该怎么做才能使ImageView
保持在中心并且自动布局不会抱怨这些缺少的大小限制?
【问题讨论】:
在垂直和水平居中后,自动布局可能需要更多的约束来确定该图像视图的大小。尝试从边距和纵横比添加高度和宽度约束或间距 但是您建议的这个约束将与 ImageView 调整大小冲突,但整个事情......我已经尝试添加这个约束......让我再试一次 如果你真的想在代码中调整图像大小,那么只需添加水平居中和垂直居中约束 n 离开它。让故事板显示需要更多约束的红色标记。它不会造成任何问题。 【参考方案1】:根据您的问题,我假设您是在 Interface Builder 中进行设置的,如果我错了,请纠正我。
您的问题是在编译时没有完全指定布局。 UIImageView
具有可以完成布局的内在内容大小,但是由于您当时没有为图像视图设置图像,因此尚未指定。
您可以在UIImageView
的大小检查器中设置占位符大小。这在运行时没有影响,但会告诉编译器稍后会有一个内在的内容大小。
【讨论】:
【参考方案2】:一个简单的解决方案:
只需在 Interface Builder 中为您的图像视图设置一个图像。(您可以使用任何您喜欢的图像作为占位符,并在运行时通过您的代码更改它。)
说明:
当您将具体图像分配给UIImageView
时,它假定intrinsicContentSize
等于图像的大小。这样,它就有了定义的宽度和高度,如果你限制它的位置(x 和 y),那么布局是明确的,Interface Builder 不会抱怨(也就是说,如果你的布局的其余部分完美无缺)。
如果您不想将图像用作占位符,则必须手动设置图像视图的宽度和高度,以便在 Interface Builder 中使用,如 iCaramba's answer 中所述。
【讨论】:
以上是关于具有动态大小的ios自动布局的主要内容,如果未能解决你的问题,请参考以下文章
具有动态视图数量和自动布局 iOS6 的 UIScrollView