Sha*_*oop 6 iphone uitableview ios autolayout nslayoutconstraint
每次我的一个自定义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]>
Run Code Online (Sandbox Code Playgroud)
或者至少我认为我做到了.让我感到困惑的是我的UITableViewCell正在工作,似乎没有任何约束被打破.我认为错误中列出的一些约束,特别是最后一个约束,是系统添加的约束.如果我不使用.xibs并且只在代码中添加了约束,这可能吗?错误的最后一行特别突出,因为我动态生成每个代码的高度,但我注意到那里的44,默认的单元格高度.
是否默认添加了一些约束,例如我打电话时[super updateConstraints]?我将如何解决这些错误或找出它们的来源?
另外,我知道浸入Core Text比我的UITextView + Auto Layout解决方案要好得多.现在我正在努力缓存单元格高度.但是,这些布局错误是否会导致滚动时滞后,或者仅仅因为我使用自动布局来计算屏幕上显示的每个单元格高度?
我发布了在Github上发生这些错误的项目,如果有人想下载并体验自己的怪异.
根据亚伦的建议,我在初始化时手动更改单元格的高度,以便在自动布局进行计算时约束可以控制它。如果最初没有设置内容框架,则默认框架为{0, 0, 320, 44}。这太小了,无法满足约束,并且错误会显示在控制台中。
同样,当重用单元格时,旧的 contentView.frame (由自动布局计算)会保留下来。如果您使用相同数量的文本(或更少),这很好,但是如果新单元格需要更多文本(因此需要更大的 contentView.frame),我们会遇到同样的问题,contentView.frame 太小并且不能满足约束条件。
因此,在我的自定义 UITableViewCell 中,我现在手动将 contentView.frame.height 设置为initWithStyle:足够prepareForReuse:大的常量,以容纳任意数量的文本(足以容纳 App.net 帖子和一些额外的净空)。这可以确保自动布局进行计算时不会出现错误。
我什至可能会考虑将此值设置得更高一些,甚至是动态设置,以适应 iOS 7 中的动态文本。至于滚动,似乎错误并没有加剧滚动的不稳定,这都是因为自动布局计算(我思考)。下一步是在viewDidAppear:调用时计算像元高度...
| 归档时间: |
|
| 查看次数: |
2353 次 |
| 最近记录: |