【发布时间】:2013-11-08 07:06:58
【问题描述】:
我在 Xcode 界面生成器中制作了一个自定义的 TableViewCell,一个 UILabel 和一个 UITextView 垂直堆叠,并设置了它们与容器单元格视图之间的垂直间距约束。
UITextView 可能需要容纳很多文本,我不希望出现垂直滚动条,所以我用 [NSString sizeWithFont:constraintTosize:] 计算 UITextView 的高度,并将其框架设置为这个新高度。
但它不起作用。
然后我注意到 .xib 中的自定义单元格具有固定的行高。我想知道这个固定高度和垂直约束是否决定了UITextView的高度,我不能改变它?
如果我想反过来怎么办:当我设置 UITextView 的高度时,包含单元格的高度是根据约束计算的?这可能吗?
【问题讨论】:
-
顺便说一句,我认为尽管Apple在自动布局等UI布局方面做出了努力,但与HTML / CSS框模型相比仍然逊色很多。
-
UITableViewDelegate 有一个方法 tableView:heightForRowAtIndexPath: - 计算高度并从这个方法返回。
-
性能 > 更简单的布局
-
@0xSina 当然我可以手动计算单元格高度,但那样自动布局约束将无用,你不觉得吗?
-
@NeoWant 自动布局/约束仍然在 UITableViewCell 中工作(就像任何其他视图一样)......但是每个单元格的大小由 UITableView 的 rowHeight 或它的委托决定。为什么?这就是 UITableView 的工作原理。它以这种特定的方式管理它的视图层次结构,使其非常优化/不滞后。想象一个包含 100 个单元格的表格视图(非常常见)。然后它将如何遍历每个单元格,应用约束并确定其自身的 contentSize...非常低效,这也是 HTML/CSS 框模型/webviews 虽然在您看来优越,但非常滞后/低效的原因之一。跨度>
标签: ios objective-c interface-builder autolayout