我在定义自定义 UITableViewCell
的故事板中。我也在使用一些内置的标准样式单元格。我需要设置约束条件,使我的 自定义单元格与平台定义单元格相匹配 (让它们的标题在左边正确对齐)。
我注意到,单元格的左对齐方式在iOS版本和它所运行的设备之间会发生变化。它 看来 如左对齐方式与默认单元格相同。separatorInset
.
这里是 UITableViewCell
s separatorInset
对于一些设备和iOS版本。
其他设备(iPhone 6+,iPad Mini)可能会有所不同--我还没有完全检查。
你如何确保自定义单元格和内置单元格的标签有相同的左对齐方式?
有没有一种合理的方法来获取这些插入的默认值,并在故事板中设置的自动布局约束中使用它们?那在代码中呢?
我也有同样的问题,但其他答案无法帮助我,因为我在UITableViewController中使用静态单元格。经过几次试错,我终于找到了解决的方法。separatorInset
在iPhone 6+上不需要一行代码就能解决这个问题。
我只是简单地将UILabel的左边缘与左边距值0[内容视图(当前距离=0)]对齐,并改变UILabel的X位置以获得0。而且还改变了UILabel的X位置,得到0。这个对齐方式在iPhone 4S、5S、6和6+上都很好用。
EDIT:在XCode 7中,这个改变了。额外的步骤。设置各单元格的 "保留超级视图边距"。TableViewCell
及其 contentView
为 "true "或在IB -> 尺寸检查器中检查。参考@tebs1200的回答。
希望这能帮到你。
你可以实现以下建议的解决方案 马克 纯粹在故事板中。
对我有用的是在我的自定义的 UITableViewCell
实现。
self.preservesSuperviewLayoutMargins = YES;
self.contentView.preservesSuperviewLayoutMargins = YES;
// ... add test view to content view...
然后我用的是自动布局,默认间距。
[self.contentView addConstraints:[NSLayoutConstraint
constraintsWithVisualFormat:@"H:|-[testView]-|" options:0 metrics:nil
views:@{@"testView":testLabel}]];
[self.contentView addConstraints:[NSLayoutConstraint
constraintsWithVisualFormat:@"V:|-[testView]-|" options:0 metrics:nil
views:@{@"testView":testLabel}]];
在iOS8中苹果推出了 layoutMargins
你可以在你的故事板或你的代码中设置它,就像这样。
cell.layoutMargins = UIEdgeInsetsZero // change by your custom value
在此之前,你必须设置 preservesSuperviewLayoutMargins
到 没有 到 防止单元格继承表视图的边距设置。
保留SuperviewLayoutMargins。 : 一个布尔值,表示当前视图是否也尊重其上层视图的边距。
希望这能帮助你;)
这是多年以后的事了,我对上面的解决方案没有任何运气。 我发现,将领先约束(在故事板中)一般设置为16,高度大小类.compact设置为20,对于iOS 13在各种设备上的效果很好。 然而,对于旧的iOS版本,我最终将该约束布线到自定义单元格的类,并添加这个。
@IBOutlet var stackViewLeadingConstraint: NSLayoutConstraint!
override func layoutSubviews() {
super.layoutSubviews()
guard #available(iOS 13, *)
else {
if traitCollection.verticalSizeClass == .compact {
stackViewLeadingConstraint.constant = 16
}
return
}
}
更新:我对这种方法可能会很脆弱感到紧张。对于我目前的情况,我意识到我可以使用各种系统tableView单元格来满足要求,而不用混入自定义单元格。 这样似乎可以解决对齐问题。