【发布时间】:2015-06-16 19:10:27
【问题描述】:
我偶然发现了一种奇怪的行为,添加到UITableView 的单元格有时会向左缩进。这只发生在 iOS 8.3 上,我找不到关于何时发生这种情况的明确模式。
有人遇到同样的事情吗?
【问题讨论】:
-
我正在经历同样的事情。stackoverflow.com/questions/29824830/…
标签: ios uitableview uiview ios8.3
我偶然发现了一种奇怪的行为,添加到UITableView 的单元格有时会向左缩进。这只发生在 iOS 8.3 上,我找不到关于何时发生这种情况的明确模式。
有人遇到同样的事情吗?
【问题讨论】:
标签: ios uitableview uiview ios8.3
嗯 - 这很奇怪......
似乎有时UITableViewCellContentView 的contentView 与UITableViewCellContentView 本身不一致。当UITableView 本身是比屏幕宽的布局的一部分时(如水平寻呼机),就会发生这种情况。
幸运的是,解决方案很简单:添加一个约束以将contentView 与其父对象对齐。这只能以编程方式完成,因为您无法在布局编辑器中编辑 contentView 的约束。
- (void)awakeFromNib {
// Initialization code
// iOS 8.3 bug, where contentView's x position isnt aligned with self's x position...
// So we add a constraint to do the obvious...
[self addConstraint:[NSLayoutConstraint constraintWithItem:self.contentView attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeLeading multiplier:1.0f constant:0.0f]];
}
这仅在 iOS 8.3 上开始发生,但该修复似乎是安全的并且向后兼容早期版本。
一如既往 - 请用您自己的经验发表评论。
【讨论】:
看起来是因为 layoutMargins 属性。我已经取消选中我的约束第二项“相对于边距”,一切都很好。这是article。
【讨论】:
我在正在开发的应用程序中看到了这个问题的变体。我们看到一些表格视图单元格的前导/尾随对齐不正确。
它没有连接到 iOS 8.3,它只在使用 Xcode 6.3 构建时发生。我可以采用相同的项目并在 Xcode 6.2 上构建它,但它不会发生。
经过一番调查,事实证明这只发生在xibs中的表格视图单元格上。
解决方法是移除对边距的前导/尾随约束,并将它们直接设置为超级视图(即单元格内容视图)。
【讨论】:
在 iOS 8.3 上运行时,我的 tableViewCells 的左右边距有所增加,这是我在以前的版本中没有看到的。
设置:
self.contentView.preservesSuperviewLayoutMargins = NO;
解决了我的问题并在所有版本上保持了一致的边距,但请注意,这仅适用于 iOS 8+。
因此,例如,您可以在此处执行此操作:
- (void)awakeFromNib {
if ([self.contentView respondsToSelector:@selector(setPreservesSuperviewLayoutMargins:)]) {
self.contentView.preservesSuperviewLayoutMargins = NO;
}
}
【讨论】:
if(respondsToSelector) 签入 awakeFromNib 中,它就停止了额外的缩进。
这对我来说是固定的。我刚刚停止使用UITableViewCell 的imageView 和textLabel 属性重新连接到我的插座。
【讨论】: