UITableView的intrinsicContentSize以其superview为中心

时间:2016-10-07 21:17:39

标签: ios objective-c uitableview xib ios-autolayout

我想使用xib文件将子类化的tableview(TSNInformationTableView)置于其superview中。

enter image description here

使用自定义内在大小设置表格的高度:

enter image description here

问题是该表可以具有动态大小/高度,不同数量的单元格内部具有不同的文本。所以在TSNInformationTableView中我定义了 intrinsicContentSize 方法:

- (CGSize) intrinsicContentSize {

        return self.contentSize
}

我对self.contentSize.height的问题是它没有返回表的正确高度,而是稍微小一些。这就是为什么我试图用乘法器1.45补偿这一点。它不能在细胞数量不同的情况下正确扩展。

在图像中有最后一个单元格的可见剪切,因为intrinsicContentSize定义的表格的高度不正确。

enter image description here

使用以下代码初始化表:

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属性,表示已创建表(这样我们就可以获得正确的表视图大小)。它现在没有任何动画问题。

此表格的估计应该设置为例如: 1000。

1 个答案:

答案 0 :(得分:0)

我必须在嵌套表的控制器中添加 - (void)viewDidLayoutSubviews。请参阅原始帖子末尾的编辑。