gpt4 book ai didi

ios - 选择时调整单元格大小时出现 NSAutoResizingMaskLayoutConstraint 错误

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:15:50 26 4
gpt4 key购买 nike

我正在实现一个自定义 UITableView,它将垂直展开单个单元格以在用户点击该单元格时显示详细信息。

当我在 didSelectRowAtIndexPath 处理程序中调用 addConstraint 到 UITableViewCell 时遇到问题:

Unable to simultaneously satisfy constraints.
...
If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints)
(
"<NSLayoutConstraint:0xa0c9cc0 V:[UITableView:0xc339c00]-(0)-| (Names: '|':UITableViewCellContentView:0xa0c8910 )>",
"<NSAutoresizingMaskLayoutConstraint:0xa0b8600 h=--& v=--& V:[UITableViewCellContentView:0xa0c8910(25)]>",
"<NSLayoutConstraint:0xa0caad0 V:|-(42)-[UITableView:0xc339c00] (Names: '|':UITableViewCellContentView:0xa0c8910 )>"
)

Will attempt to recover by breaking constraint
<NSLayoutConstraint:0xa0c9cc0 V:[UITableView:0xc339c00]-(0)-| (Names: '|':UITableViewCellContentView:0xa0c8910 )>

这里有一些关于我的实现的更多细节:

  1. 当用户选择一个单元格时,didSelectRowAtIndexPath 在我的子类 UITableView 中被调用,我在其中更新了一个名为 selectedRowIndex 的成员。
  2. 同样在 didSelectRowAtIndexPath 中,我在单元格上调用 addConstraint(我通过 [tableView cellForRowAtIndexPath:indexPath] 检索)。这是一个垂直约束:“V:|-(42)-[embeddedTableView]”,它确保在单元格的详细 View 中另一个嵌入表上方有空间。
  3. 完成 didSelectRowAtIndexPath 后,调用 heightForRowAtIndex。我的 heightForRowAtIndex 实现将检查 selectedRowIndex 值并为所选行返回更大的高度。

在第2步,出现了上面的“Unable to simultaneously satisfy constraints”的错误。我相信这是因为在 heightForRowAtIndex 之前调用了 didSelectRowAtIndexPath。我的直觉是 translatesAutoresizingMaskIntoConstraints 设置(在我的实现中为 YES)正在创建基于单元格高度的运行时值的新约束,该值在运行 didSelectRowAtIndexPath 代码后更新。

是否有解决此问题的推荐方法?或者是否有一种替代方法来执行单元格扩展,它仍然允许我为单元格的内容设置必要的单元格约束?

最佳答案

想通了。我的部分问题与此处的解决方案有关:How is it possible that UITableViewCellContentView height is different from heightForRowAtIndexPath:

我发现我需要在单元格的子类 awakeFromNib 中添加 [self.contentView setAutoresizingMask:UIViewAutoresizingFlexibleHeight] 以允许调整单元格的高度。

但这并不是全部解决方法。阅读一些内容后,我找到了与调用 heightForRowAtIndex 之前调用 addConstraint 相关的其他问题的答案。我的怀疑是正确的,在 didSelectRowAtIndexPath 中调用 addConstraint 是有问题的。

根据 UIView Class Reference ,添加约束的正确方法是在 didSelectRowAtIndexPath 中调用 - (void)setNeedsUpdateConstraints。这会导致调用 updateConstraints,这是我必须为自定义约束更新实现的函数。

关于ios - 选择时调整单元格大小时出现 NSAutoResizingMaskLayoutConstraint 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25830350/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com