【发布时间】:2017-02-16 23:11:21
【问题描述】:
我想使用 xib 文件将子类表视图 (TSNInformationTableView) 置于其父视图的中心。
使用自定义固有尺寸设置表格的高度:
问题是表格可以具有动态大小/高度,不同数量的单元格,其中包含不同的文本。所以在 TSNInformationTableView 我定义了 intrinsicContentSize 方法:
- (CGSize) intrinsicContentSize {
return self.contentSize
}
self.contentSize.height 的问题是它没有返回正确的表格高度,而是一些更小的东西。这就是为什么我试图用乘数 1.45 来弥补这一点。它不能正确缩放不同数量的单元格。
由于intrinsicContentSize 定义的表格高度不正确,因此图像中最后一个单元格有一个可见的切口。
使用以下代码初始化表:
self.informationTableView.estimatedRowHeight = 80;
self.informationTableView.rowHeight = UITableViewAutomaticDimension;
[self.informationTableView setScrollEnabled:NO];
更新
我必须在表视图(TSNInformationTableView)嵌套的控制器中添加这个方法:
- (void) viewDidLayoutSubviews {
[super viewDidLayoutSubviews];
if(!self.isInformationTableViewLoaded) {
self.isInformationTableViewLoaded = YES;
[self.InformationTableView invalidateIntrinsicContentSize];
[self.InformationTableView setNeedsLayout];
}
}
isInformationTableViewLoaded 只是控制器中的一个简单的 BOOL 属性,指示表已创建(以便我们可以获得适当的表视图大小)。它现在可以正常工作,没有任何动画问题。
表的estimatedRowHeight 也应该设置为例如1000.
【问题讨论】:
-
您是否有理由不使用高度和宽度约束来调整 TableView 的大小? (您可以通过将它们连接为插座来动态/以编程方式更新)
-
我正在使用它。但我不知道桌子在创建之前的高度。我在呈现的实现中使用的 intrinsicContent 大小方法会产生相同的布局。我可以用任何正确的值更新它。显然 tableview.contentSize 即使在表格被绘制之后也不是正确的。我不知道为什么。我没有使用任何页眉/页脚。
-
你在单元格中显示什么样的数据?你有不同(动态)高度的细胞吗? (顺便说一句,您帖子中带有“sdfsdfsf”的图像应该是什么?)
-
@Kymer 单元格的数量和文本可以变化,这就是为什么我不能设置表格的高度。首先,必须启动自动布局,并记录intrinsicConentSize 以帮助它获得正确的高度。
标签: ios objective-c uitableview xib ios-autolayout