【发布时间】:2021-04-29 13:38:15
【问题描述】:
我有一个带有静态内容的自定义 UITableViewCell,它有一个 UIStackView 作为内容视图的单个子视图。我希望 UIStackView 使用与 UIKit 中内置的标准 UITableViewCell 相同的水平边距/插图,涵盖从 iOS 9(我的最低部署目标)到当前 iOS 14 的所有 iOS 版本,以及 iPhone 和 iPad 设备。
我天真地开始添加将 UIStackView 的前导/尾随锚点附加到内容视图的 readableContentGuide 的约束。我不喜欢 Interface Builder,所以我的代码是这样的:
UIStackView stackView = [...]
[stackView.leadingAnchor constraintEqualToAnchor:self.contentView.readableContentGuide.leadingAnchor].active = YES;
[stackView.trailingAnchor constraintEqualToAnchor:self.contentView.readableContentGuide.trailingAnchor].active = YES;
这很好用,除了在某些情况下 (1) 标准 UITableViewCell 确实不使用readableContentGuide,因此将标准单元格与我的自定义单元格混合看起来很糟糕,因为它们的边缘没有对齐.在这里您可以看到 4 个自定义单元格,顶部和底部各有一个标准单元格:
(1) 它发生在这些场景中:
- 在带有凹口的 iPhone 设备上,当设备横向握持时
- 在 iPad 设备上,纵向和横向都可以
我曾尝试使用layoutMarginsGuide 而不是readableContentGuide,但这会导致许多约束错误(“无法同时满足约束。”在 Xcode 的调试输出中)。我也试过设置
self.tableView.cellLayoutMarginsFollowReadableWidth = YES;
在使用我的自定义单元格的表格视图中,这是因为标准单元格现在的边缘与我的自定义单元格位于同一位置。但我不喜欢这种解决方法,首先因为这意味着我必须为每个想要使用我的自定义单元格的表格视图进行特殊设置,其次因为它不必要地减少了可用于数据显示的宽度。
我好像遗漏了什么。是否有一种简单、标准的方式可以使用布局指南来布局自定义 UITableViewCell 的内容,以便自定义单元格内容的边缘与标准单元格的边缘位于同一位置?
【问题讨论】:
标签: ios objective-c uitableview