iOS 7 和 8 中 UITableViewCells 的自动布局指标不同

Posted

技术标签:

【中文标题】iOS 7 和 8 中 UITableViewCells 的自动布局指标不同【英文标题】:Autolayout metrics differs between iOS 7 & 8 for UITableViewCells 【发布时间】:2014-12-11 05:57:51 【问题描述】:

我有一个自定义的UITableViewCell,它只包含一个包含静态文本的UILabel,我在代码中编写了两个Autolayout 约束(使用常规方式但不是视觉格式)来固定单元格容器视图的标签,它适用于ios 7iOS 8 设备,但在iOS 8 中有一个奇怪的问题:标签的顶部边缘距离容器的顶部边缘12 像素视图(这是正确且预期的指标),但在iOS 8 中比这更多,大约 20 个像素,并且标签的前缘也会发生相同的移动。

这是什么意思?与UIKit 相关的iOS 7iOS 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];

任何帮助将不胜感激...

【问题讨论】:

尝试设置label.layoutMargins = UIEdgeInsetsMake(0,0, 0, 0),在iOS 8中默认边距为8pt。 试过了,没有任何改变 见***.com/questions/25762723/… 展示您的项目,以便我们知道如何修复它。 很抱歉我不能分享,这是一个大项目 【参考方案1】:

在我的情况下,我需要在运行时手动向图像视图添加特定约束,结果是 iOS7(完全附加到单元格的左侧)和 iOS8(正确对齐)中的不同前导对齐方式。问题不仅在单元格中,甚至在 UITableView 约束中:

1) 检查你的 tableview 前导和尾随约束,必须像那些:

对于前导和尾随,有时当您手动将表格视图添加到视图控制器时,将表格视图的左侧和右侧对齐的自然方式将其设置为 -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]];

【讨论】:

以上是关于iOS 7 和 8 中 UITableViewCells 的自动布局指标不同的主要内容,如果未能解决你的问题,请参考以下文章

iOS 7 到 iOS 8 中当前位置纬度和经度的不同行为

iOS 7 和 iOS 8 上的不同帧高度

如何在 iOS 7 和 iOS 8 中锁定设备方向

iOS 7 和 iOS 8 中 UIImagepickercontroller 的相机视图上的状态栏重叠

iOS 7 和 iOS 8 中的警报视图与 UIAlertController

在 iOS 7 和 8 中使用 AVPlayer 进行远程控制