iOS 8.3 - UITableView 单元格未对齐,向左缩进
iOS 8.3 - UITableView cell not aligned, indentation to the left
我偶然发现了一个奇怪的行为,即添加到 UITableView
的单元格有时会向左缩进。这只发生在 iOS 8.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 property. I've unchecked my constraint second item "Relative to margin" and everything worked great. Here is the article.
我在我正在开发的应用程序中发现了这个问题的变体。我们发现一些 table 视图单元格 leading/trailing 对齐不正确。
它没有连接到 iOS 8.3,只有在使用 Xcode 6.3 构建时才会出现。我可以采用相同的项目并在 Xcode 6.2 上构建它,但它不会发生。
经过一番调查,发现这只发生在 xibs 中的 table 视图单元格上。
解决方法是删除对边距的 leading/trailing 约束并将它们直接设置到超级视图(即单元格内容视图)。
在 iOS 8.3 上 运行 时,我的 tableViewCells 看到左右边距增加了,我在以前的版本中没有看到。
设置:
self.contentView.preservesSuperviewLayoutMargins = NO;
解决了我的问题并使我的边距在所有版本上保持一致,但请注意,这仅适用于 iOS 8+。
例如,您可以在这里执行此操作:
- (void)awakeFromNib {
if ([self.contentView respondsToSelector:@selector(setPreservesSuperviewLayoutMargins:)]) {
self.contentView.preservesSuperviewLayoutMargins = NO;
}
}
这对我来说是固定的。我刚刚停止使用 UITableViewCell
的 imageView
和 textLabel
属性重新连接到我的插座。
我偶然发现了一个奇怪的行为,即添加到 UITableView
的单元格有时会向左缩进。这只发生在 iOS 8.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 property. I've unchecked my constraint second item "Relative to margin" and everything worked great. Here is the article.
我在我正在开发的应用程序中发现了这个问题的变体。我们发现一些 table 视图单元格 leading/trailing 对齐不正确。
它没有连接到 iOS 8.3,只有在使用 Xcode 6.3 构建时才会出现。我可以采用相同的项目并在 Xcode 6.2 上构建它,但它不会发生。
经过一番调查,发现这只发生在 xibs 中的 table 视图单元格上。
解决方法是删除对边距的 leading/trailing 约束并将它们直接设置到超级视图(即单元格内容视图)。
在 iOS 8.3 上 运行 时,我的 tableViewCells 看到左右边距增加了,我在以前的版本中没有看到。
设置:
self.contentView.preservesSuperviewLayoutMargins = NO;
解决了我的问题并使我的边距在所有版本上保持一致,但请注意,这仅适用于 iOS 8+。
例如,您可以在这里执行此操作:
- (void)awakeFromNib {
if ([self.contentView respondsToSelector:@selector(setPreservesSuperviewLayoutMargins:)]) {
self.contentView.preservesSuperviewLayoutMargins = NO;
}
}
这对我来说是固定的。我刚刚停止使用 UITableViewCell
的 imageView
和 textLabel
属性重新连接到我的插座。