iOS 如何在不删除约束的情况下调整具有不同内容的 tableView 单元格的大小
How to get resizing tableView cell with different content without deleting constraints in iOS
我在一个单元格中有一个包含不同内容(视图、标签、图像视图)的 tableView 单元格。但是在某些单元格中内容可能不完整。我如何在不删除和添加始终约束的情况下使用调整单元格大小?谢谢。
Ray Wenderlich 有一个关于 table 单元格动态大小的精彩教程,可在此处找到:
https://www.raywenderlich.com/129059/self-sizing-table-view-cells
TL;DR 您需要确保单元格的内容在单元格内容视图的所有四个边上都固定,并设置为高优先级垂直拥抱,大于或等于标签上的高度限制。
此问题的可能解决方案之一:
- 为优先级为 1000 的隐藏状态添加约束
- 为具有较低优先级(例如 750)的已调整状态添加额外约束
- 将仅 的隐藏状态约束保存到
IBOutlet
集合
- 将 ONLY 的约束保存到另一个
IBOutlet
集合中
代码:
@IBOutlet var hiddenConstraints: [NSLayoutConstraint] = []
@IBOutlet var visibleConstraints: [NSLayoutConstraint] = []
func hide(_ hide: Bool) {
for hiddenConstraint in self.hiddenConstraints {
hiddenConstraint.isActive = hide
}
for visibleConstraint in self.visibleConstraints {
visibleConstraint.isActive = !hide
}
self.layoutIfNeeded()
}
有更快的解决方案:
- 将可以隐藏的内容移动到容器视图中
- 设置容器视图的高度限制
- 如果隐藏则从代码高度约束常量更改为 0,如果可见则更改为适当的高度
代码:
@IBOutlet var heightConstraint: NSLayoutConstraint!
func hide(_ hide: Bool) {
self. heightConstraint.constant = hide ? 0 : 150 //Estimated height
self.layoutIfNeeded()
}
这不是一个好方法,因为它会导致约束在运行时崩溃。所以我更喜欢用第一个。
此外,您还需要从 table 更新您的单元格,以便向上或向下移动其他单元格。
我在一个单元格中有一个包含不同内容(视图、标签、图像视图)的 tableView 单元格。但是在某些单元格中内容可能不完整。我如何在不删除和添加始终约束的情况下使用调整单元格大小?谢谢。
Ray Wenderlich 有一个关于 table 单元格动态大小的精彩教程,可在此处找到: https://www.raywenderlich.com/129059/self-sizing-table-view-cells
TL;DR 您需要确保单元格的内容在单元格内容视图的所有四个边上都固定,并设置为高优先级垂直拥抱,大于或等于标签上的高度限制。
此问题的可能解决方案之一:
- 为优先级为 1000 的隐藏状态添加约束
- 为具有较低优先级(例如 750)的已调整状态添加额外约束
- 将仅 的隐藏状态约束保存到
IBOutlet
集合 - 将 ONLY 的约束保存到另一个
IBOutlet
集合中
代码:
@IBOutlet var hiddenConstraints: [NSLayoutConstraint] = []
@IBOutlet var visibleConstraints: [NSLayoutConstraint] = []
func hide(_ hide: Bool) {
for hiddenConstraint in self.hiddenConstraints {
hiddenConstraint.isActive = hide
}
for visibleConstraint in self.visibleConstraints {
visibleConstraint.isActive = !hide
}
self.layoutIfNeeded()
}
有更快的解决方案:
- 将可以隐藏的内容移动到容器视图中
- 设置容器视图的高度限制
- 如果隐藏则从代码高度约束常量更改为 0,如果可见则更改为适当的高度
代码:
@IBOutlet var heightConstraint: NSLayoutConstraint!
func hide(_ hide: Bool) {
self. heightConstraint.constant = hide ? 0 : 150 //Estimated height
self.layoutIfNeeded()
}
这不是一个好方法,因为它会导致约束在运行时崩溃。所以我更喜欢用第一个。
此外,您还需要从 table 更新您的单元格,以便向上或向下移动其他单元格。