AutoLayout适用于ios 8但不适用于ios 7吗?

时间:2014-10-03 00:58:42

标签: ios objective-c ios7 ios8

我在UICollectionViewCell中使用autolayout。超级简单的布局:只是一个UILabel。我希望UILabel占据整个宽度减去20像素的插入,并在垂直和水平方向上居中。我设置了那样做的约束。如果我在任何ios 8设备或模拟器上运行它,它可以很好地工作。但是,当我在某些ios 7设备上运行时,约束无效。我尝试查看苹果文档,但他们的更改似乎都不是围绕自动布局。

这是XML源代码,但我怀疑它意义重大:

<constraints>
            <constraint firstItem="OIc-cg-9hO" firstAttribute="leading" secondItem="Ga6-nx-lOn" secondAttribute="leading" constant="20" id="A7U-sd-fcL"/>
            <constraint firstAttribute="centerY" secondItem="OIc-cg-9hO" secondAttribute="centerY" id="G9e-9W-aDS"/>
            <constraint firstAttribute="centerX" secondItem="OIc-cg-9hO" secondAttribute="centerX" id="TrB-hI-7Kw"/>
            <constraint firstAttribute="trailing" secondItem="OIc-cg-9hO" secondAttribute="trailing" constant="20" id="yjH-nf-D9U"/>
        </constraints>

更多的解决方法而不是答案:但我在代码中添加了约束,如下所示:

    [self addConstraint:[NSLayoutConstraint constraintWithItem:self.cellName
                                                      attribute:NSLayoutAttributeWidth
                                                      relatedBy:NSLayoutRelationEqual
                                                         toItem:self
                                                      attribute:NSLayoutAttributeWidth
                                                     multiplier:1.0
                                                       constant:-20.0]];

[self addConstraint:[NSLayoutConstraint constraintWithItem:self.cellName
                                                      attribute:NSLayoutAttributeCenterX
                                                      relatedBy:NSLayoutRelationEqual
                                                         toItem:self
                                                      attribute:NSLayoutAttributeCenterX
                                                     multiplier:1.0
                                                       constant:0.0]];

[self addConstraint:[NSLayoutConstraint constraintWithItem:self.cellName
                                                      attribute:NSLayoutAttributeCenterY
                                                      relatedBy:NSLayoutRelationEqual
                                                         toItem:self
                                                      attribute:NSLayoutAttributeCenterY
                                                     multiplier:1.0
                                                       constant:0.0]];

为了使其工作,我需要编码约束和IB约束。不知道为什么!

2 个答案:

答案 0 :(得分:5)

听起来您的Interface Builder约束正在使用&#34; Constraint to Margin&#34; iOS7不支持的选项。在IB中打开约束并检查它们中是否有任何项目具有相对于保证金的项目&#39;选项已选中。

有关保证金限制的详细信息,请参阅What is "Constrain to margin" in Storyboard in Xcode 6What is "Constrain to margin" in Storyboard in Xcode 6

答案 1 :(得分:4)

这件事发生在我身上,你必须检查用户界面中的每个约束并删除iOS 8中引入的相对于保证金,并且不支持iOS 7,不要忘记那些在某些地方的内容你可能会忘记(比如UITableView单元格)。

要找到此选项:

  1. 点按UI控件

  2. 转到尺寸检查器

  3. 双击任何约束并检查边距,只需将其关闭并修改约束(如果有任何更改)。

  4. enter image description here