ios - 在 iOS 上使用自动布局如何指定 View 应占用尽可能多的空间?

标签 ios ios6 autolayout

我在 iOS 中使用自动布局来尝试构建具有可变宽度的布局。我当前使用的约束的视觉格式是:

[self.scrollViewContainer addConstraints:[NSLayoutConstraint 
     constraintsWithVisualFormat:@"H:|-(>=32)-[viewToAdd(<=576)]-(>=32)-|" 
                         options:0 
                         metrics:nil  
                           views:NSDictionaryOfVariableBindings(viewToAdd)
]];

也就是说:我希望两侧至少有 32px 的间距,并且我希望 viewToAdd 的最大宽度为 576px。这很好用,除了我希望 viewToAdd 在满足所有约束的同时用完所有可用空间。目前,我得到的 viewToAdd 只能与其固有内容大小一样宽,并且间距会根据需要增加。

有没有办法指定 viewToAdd 应该尽可能大?

最佳答案

您将必须在 View 上指定额外的约束,以便调整 View 的大小以填充剩余的可用空间。目前,您正在设置 View 的最小值和最大值,但没有设置任何具体的约束来为自动布局提供更完整的解决方案。除了宽度的上限之外,您还需要给它 1. 一个起点来解决 View 的宽度,方法是明确地给它一个较低优先级的宽度,或者 2. 给两边更多的间距刚性约束。

根据您所描述的内容,您需要限制您的 View ,为它提供一些更实质性的绑定(bind)到任一侧的 super View ,以便让系统解决宽度问题。由于您希望 View 本身的大小基于它的容器大小,因此您需要修改间距约束(上面的选项 2)。在上面的例子中,您只指定了一个最小间距,这将导致自动布局引擎发现以下任何约束解决方案对 400pt super View 有效:

|-32pt-[20pt]-------348pt-| <-- autolayout will probably choose this one
|-100pt----[20pt]---280pt-|
|-50pt--[20pt-]-----330pt-|

这可能不是您想要的。更重要的是, View 的宽度可以是 0-576pt 之间的任何值,这也可能不是您想要的。由于自动布局不知道您想要什么,它只是使用 View 的 intrinsicContentSize 来实现具体的大小限制。由于您选择 32pt 作为间距,第一步是给间距约束一些更实质性的说明,即告诉系统 View 和父 View 的边缘之间的间距应该为 32pts 除非 View 的宽度>576pts。您可以在 VFL 字符串中这样做:

"H:|-(>=32,==32@900)-[viewToAdd(<=576)]-(>=32,==32@900)-|"

这是说:“viewToAdd 的最大宽度应为 576pts,并且其自身与其父 View 之间的填充宽度为 32pts。如果父 View 的大小超出最大值viewToAdd 的宽度加上 64pts 的初始填充,两侧的填充应该增长以继续解决约束集。”

这导致以下约束对于 400pt super View 是正确的:

|-32pt--[336pt]--32pt-|

如果您希望 viewToAdd 在 View 超出最大值时保持其父 View 居中,您必须将选项 NSLayoutFormatAlignAllCenterX 传递给 [NSLayoutConstraint -constraintsWithVisualFormat:] 中的 >options 参数。如果您没有在填充上设置 >=32 约束,或者没有在填充的 ==32 约束,那么你的 superview 将无法超过 640pts。

关于ios - 在 iOS 上使用自动布局如何指定 View 应占用尽可能多的空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13132609/

相关文章:

ios - 以这种方式使用 StringByAppendingString 有多安全?

iphone - 使用 CGImageCreateWithJPEGDataProvider 时内存泄漏

ios - 具有自动布局的 GPUImageView

iOS - AutoLayout 可以像 view0.height = view1.height + view2.height 这样的约束吗?

iOS Swift 2 生成 AES key

ios native 应用程序与 API 或直接数据库连接交谈?

xcode - UIActivityViewController根据所选事件自定义文本

iphone - uibarbuttonitem iOs 6 横向的自定义图像

ios - 移动快速结帐 Paypal

ios - 从布局中删除 View 并让其他元素重新组织自身