我在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约束。不知道为什么!
答案 0 :(得分:5)
听起来您的Interface Builder约束正在使用&#34; Constraint to Margin&#34; iOS7不支持的选项。在IB中打开约束并检查它们中是否有任何项目具有相对于保证金的项目&#39;选项已选中。
有关保证金限制的详细信息,请参阅What is "Constrain to margin" in Storyboard in Xcode 6和What is "Constrain to margin" in Storyboard in Xcode 6。
答案 1 :(得分:4)
这件事发生在我身上,你必须检查用户界面中的每个约束并删除iOS 8中引入的相对于保证金,并且不支持iOS 7,不要忘记那些在某些地方的内容你可能会忘记(比如UITableView单元格)。
要找到此选项:
点按UI控件
转到尺寸检查器
双击任何约束并检查边距,只需将其关闭并修改约束(如果有任何更改)。