您将不得不在视图上指定额外的约束,以使其调整视图的大小以填充剩余的可用空间。目前,您正在设置视图的最小值和最大值,但没有设置任何具体的约束来为自动布局提供更完整的解决方案。除了宽度的上限之外,您还需要给它 1. 一个起点来解决视图的宽度,方法是明确地给它一个较低优先级的宽度,或者 2. 给两边的间距多一些刚性约束。
根据您所描述的,您需要约束您的视图,使其与任一侧的超级视图有更多实质性的绑定,以便让系统解决宽度问题。由于您希望根据容器的大小来设置视图大小,因此您需要修改间距约束(上面的选项 2)。在上面的例子中,您只指定了最小间距,这将导致自动布局引擎发现以下任何约束解决方案对于 400pt 超级视图是有效的:
|-32pt-[20pt]-------348pt-| <-- autolayout will probably choose this one
|-100pt----[20pt]---280pt-|
|-50pt--[20pt-]-----330pt-|
这可能不是你想要的。更重要的是,视图的宽度可以在 0-576pt 之间,这也可能不是您想要的。由于自动布局不知道你想要什么,它只是使用intrinsicContentSize
视图的具体尺寸约束。由于您选择 32pt 作为间距,第一步是给间距约束一些更实质性的指令,即告诉系统视图边缘和父视图之间的间距应该是32pts,除非视图的宽度是>576 分。你会在你的 VFL 字符串中这样做:
"H:|-(>=32,==32@900)-[viewToAdd(<=576)]-(>=32,==32@900)-|"
这表示:“viewToAdd
最大宽度应为 576pts,并且在其自身与其父视图之间有 32pts 的填充。 如果父视图的大小超过最大宽度viewToAdd
加上 64pts 的初始填充,则两侧的填充应按顺序增长继续求解约束集。”
这导致以下约束对于 400pt 超级视图是正确的:
|-32pt--[336pt]--32pt-|
如果您希望viewToAdd
在视图增长超过最大值时保持在其超级视图的中心,则必须将选项传递给 in 中NSLayoutFormatAlignAllCenterX
的options
参数[NSLayoutConstraint -constraintsWithVisualFormat:]
。如果您没有>=32
在 padding 上设置约束,或者没有在 padding 的约束上设置低于 1000(“必需”约束优先级)的优先级==32
,那么您的 superview 将无法增长到 640pts 以上。