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 7
和iOS 8
设备,但在iOS 8
中有一个奇怪的问题:标签的顶部边缘距离容器的顶部边缘12 像素视图(这是正确且预期的指标),但在iOS 8
中比这更多,大约 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];
任何帮助将不胜感激...
【问题讨论】:
尝试设置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 中 UIImagepickercontroller 的相机视图上的状态栏重叠