我有一个项目在 xcode 12.5.1 和 15.2 之前的 ios 中运行良好 - 它具有 UITableView 和包含嵌入式视图的单元格。我在加载 UITableViewController 时默认设置“未扩展”单元格的高度,然后通过点击行来扩展它们。
当我迁移到 Xcode 13.2.1 并且应用程序在 ios 15.2 设备上运行时,它有一个单元格高度错误 -
当 UITableViewController 加载和加载包含嵌入视图的单元格时,它的高度总是设置为嵌入视图的高度。
也许有人面临这个错误并有任何解决方案?
代码:
这就是我添加单元格的方式 -
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = cells[indexPath.section]![indexPath.row]
cell.layer.zPosition = CGFloat(indexPath.row)
cell.configure(with: models[indexPath.section]![indexPath.row])
if indexPath.section == 0
{
switch indexPath.row {
case 0:
cell.addEmbeddedView(Section.init())
default:
break
}
}
这就是我在点击单元格之前“修复”单元格大小不扩大的方式:
extension UITableView {
func fixCellBounds() {
DispatchQueue.main.async { [weak self] in
for cell in self?.visibleCells ?? [] {
cell.layer.masksToBounds = false
cell.contentView.layer.masksToBounds = false
}
}
}
以及点击它时如何扩展单元格:
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
guard let cell = tableView.cellForRow(at: indexPath) as? MyTableViewCell else { return }
tableView.beginUpdates()
cell.expanded.toggle()
tableView.fixCellBounds()
tableView.endUpdates()
}
var expanded: Bool = false {
didSet {
let duration = CATransaction.animationDuration()
UIView.animate(withDuration: duration) {
self.arrow.transform = self.expanded ? CGAffineTransform(rotationAngle: .pi / 2) : .identity
self.height.isActive = !self.expanded
self.foldView.alpha = self.expanded ? 1 : 0
self.container.layoutIfNeeded()
}
}
}