每次我的自定义 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 + 自动布局解决方案要好得多。现在我正在研究缓存单元高度。但是,这些布局错误是否会导致滚动时出现滞后,或者仅仅是因为我使用自动布局来计算屏幕上每个单元格的高度?
我已经发帖了Github 上发生这些错误的项目 https://github.com/shawnthroop/Post-UITableViewCells如果有人想下载并亲自体验其中的怪异。
根据亚伦的建议,我在初始化时手动更改单元格的高度,以便在自动布局进行计算时约束可以控制它。最初没有设置内容框架,默认框架是{0, 0, 320, 44}
。这太小了,无法满足约束,并且错误会显示在控制台中。
同样,当重用单元格时,旧的 contentView.frame(由自动布局计算)会保留下来。如果您使用相同数量的文本(或更少),这很好,但是如果新单元格需要更多文本(因此需要更大的 contentView.frame),我们会遇到同样的问题,contentView.frame 太小并且不能满足约束条件。
因此,在我的自定义 UITableViewCell 中,我现在手动设置 contentView.frame.heightinitWithStyle:
and prepareForReuse:
一个足够大的常量,可以容纳任意数量的文本(足以容纳 App.net 帖子和一些额外的空间)。这可以确保自动布局进行计算时不会出现错误。
我什至可能会考虑将此值设置得稍高一点,甚至是动态设置,以适应 iOS 7 中的动态文本。至于滚动,似乎错误并没有加剧滚动的不稳定,这都是因为自动布局计算(我思考)。下一步是计算单元高度viewDidAppear:
叫做...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)