gpt4 book ai didi

ios - 如何修复似乎不影响自定义 UITableViewCell 布局的奇怪 NSLayoutConstraint 错误

转载 作者:可可西里 更新时间:2023-11-01 03:58:16 25 4
gpt4 key购买 nike

每次我的自定义 UITableViewCells 中的一个由 tableView:cellForRowAtIndexPath 绘制:控制台吐出一堆 NSLayoutConstraint 不一致。我了解其中的大部分内容:

 Unable to simultaneously satisfy constraints. ...boring stuff..

"<NSLayoutConstraint:0x8b0eb60 V:|-(NSSpace(20))-[UILabel:0x8b0cb30] (Names: '|':UITableViewCellContentView:0x8bd7d40 )>",
"<NSLayoutConstraint:0x8b0db70 V:[UILabel:0x8b0cb30]-(NSSpace(8))-[UITextView:0x91dba00]>",
"<NSLayoutConstraint:0x8b0dba0 V:[UITextView:0x91dba00]-(NSSpace(20))-| (Names: '|':UITableViewCellContentView:0x8bd7d40 )>",
"<NSLayoutConstraint:0x8b0d5a0 V:[UITextView:0x91dba00(1000)]>",
"<NSAutoresizingMaskLayoutConstraint:0x8b00330 h=--& v=--& V:[UITableViewCellContentView:0x8bd7d40(44)]>"
)

Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x8b0db70 V:[UILabel:0x8b0cb30]-(NSSpace(8))-[UITextView:0x91dba00]>

或者至少我认为我是。真正让我感到困惑的是,我的 UITableViewCell 正在工作并且似乎没有任何约束被打破。我认为错误中列出的一些约束,尤其是最后一个,是系统添加的约束。如果我不使用 .xibs 并且只在代码中添加约束,这可能吗?错误中的最后一行特别让我印象深刻,因为我正在为每个代码动态生成高度,但我注意到其中的 44,即默认单元格高度。

这些约束中的一些是否是默认添加的,例如当我调用 [super updateConstraints] 时?我将如何解决这些错误或找出它们的来源?

附带说明一下,我知道使用 Core Text 比我的 UITextView + Auto Layout 解决方案执行得更好。现在我正在研究缓存单元格高度。但是,这些布局错误是否会导致滚动时出现延迟,或者仅仅是因为我使用自动布局来计算每个单元格在屏幕上的高度?

我已经发布了 the project in which these errors are occurring on Github如果有人想下载并亲自体验这种奇怪的感觉。

最佳答案

根据 Aaron 的建议,我在初始化单元格时手动更改单元格的高度,以便在自动布局进行计算时约束可以控制它。如果最初不设置内容框架,默认框架是 {0, 0, 320, 44}。这太小了,无法满足控制台中显示的约束和错误。

同样,当重新使用单元格时,旧的 contentView.frame(由自动布局计算)仍然存在。如果您使用相同数量的文本(或更少),这很好,但如果新单元格需要更多文本(因此需要更大的 contentView.frame),我们会遇到同样的问题,即 contentView.frame 太小并且不能满足约束。

因此,在我的自定义 UITableViewCell 中,我现在手动将 initWithStyle:prepareForReuse: 中的 contentView.frame.height 设置为一个足够大的常量以容纳任意数量的文本(足够用于 App.net 帖子和一些额外的空间)。这可确保自动布局在进行计算时不会出现错误。

我什至可能会考虑将此值设置得更高一点,或者甚至是动态地设置,以适应 iOS 7 中的动态文本。至于滚动,看来错误并没有加剧不连贯的滚动,这都是因为自动布局计算(我认为)。下一步是在调用 viewDidAppear: 时计算单元格高度...

关于ios - 如何修复似乎不影响自定义 UITableViewCell 布局的奇怪 NSLayoutConstraint 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19885421/

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