我有一个自定义的UITableViewCell,它只包含一个包含静态文本的UILabel,我在代码中编写了两个Autolayout约束(使用常规方式,但不是可视格式)来将标签的前缘和顶边固定到单元格的容器视图,它在iOS 7和iOS 8设备上都有效,但在iOS 8中有一个奇怪的问题:标签的上边缘离容器视图的上边缘有12个像素(这是正确和预期的度量标准),但在iOS 8中超过了12个像素,大约20个像素。标签的前缘也会发生同样的移位。
这意味着什么?这是否与UIKit在iOS 7和iOS 8之间的变化有关,UITableViewCells现在的层次结构中包含一个隐藏的scrollView?
附注:约束条件是:
constraint = [NSLayoutConstraint constraintWithItem:self.myLabel attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.contentView attribute:NSLayoutAttributeTop multiplier: 1.0 constant:12];
[self.contentView addConstraint:constraint];
constraint = [NSLayoutConstraint constraintWithItem:self.myLabel attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:self.contentView attribute:NSLayoutAttributeLeading multiplier:1.0 constant:12];
[self.contentView addConstraint:constraint];任何帮助都将不胜感激。
发布于 2015-03-19 18:39:20
在我的例子中,我需要在运行时手动向图像视图添加特定的约束,结果是在iOS7 (完全连接到单元格的左侧)和iOS8 (正确对齐)中出现了不同的前导对齐。问题不仅存在于单元中,甚至还存在于UITableView约束中:
1)检查您的表视图前导约束和尾随约束,必须类似于这些约束:

对于前导和拖尾,有时当您手动将表视图添加到视图控制器时,将表视图的左右对齐的自然方式是将其设置为-16,这在iOS 8上效果很好,但在iOS 7上效果不佳。
2)如果您修改/添加了一些约束,请检查单元格是否响应setLayoutMargins (仅iOS8),如果是,请更改约束的常量值:
CGFloat leftMargin = 8.0;
if ([self respondsToSelector:@selector(setLayoutMargins:)]) {
leftMargin = 0.0;
}
[self.contentView addConstraint:[NSLayoutConstraint constraintWithItem:self.userImageView attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:self.contentView attribute:NSLayoutAttributeLeadingMargin multiplier:1 constant:leftMargin]];https://stackoverflow.com/questions/27416316
复制相似问题