如何在UITableView

时间:2018-05-03 11:11:26

标签: ios swift uitableview

假设我有一个带有动态内容的UITableView,但想象一下它包含一个由100px和6行á44px的表头组成的部分。 请记住,可能有1个部分有2行,或4个部分,10行等,完全是动态的。

当tableView显示其内容时,我根本无法滚动(仅反弹),因为tableView中的所有内容都是可见的。

我需要能够滚动100px的节标题,在底部提供更多的空白空间。只有足够的空间使标题在外面,第一个单元格位于最顶层。

为了达到这个目的,我可以存储每个不同单元格的原型实例并“手动”计算总单元格的高度,然后添加一个幻像单元格(或一个截面页脚)需要高度。我觉得应该有更好的方式。

如果集体细胞高度大于可见屏幕,那么我希望一切都正常,底部没有额外的空间。

我尝试在tableView.contentSize之后手动设置reloadTablemax(tableView.bounds.size.height+100, tableView.contentSize),但似乎无论我做什么都会覆盖contentSize,所以我试图找到其他方法来做到这一点。

2 个答案:

答案 0 :(得分:0)

这完美无缺

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    let visibleHeight = self.tableView.bounds.size.height - self.topLayoutGuide.length - self.bottomLayoutGuide.length
    var actualContentSize = visibleHeight - (self.tableView.contentSize.height - (header.bounds.size.height - header.subviewThatShouldBeVisibleIfAny.bounds.size.height))
    if #available(iOS 11.0, *){
        //Nothing
    }else{
        actualContentSize += self.bottomLayoutGuide.length
    }
    var inset = self.tableView.contentInset
    if #available(iOS 11.0, *){
        inset.bottom = max(actualContentSize, 0)
    }else{
        inset.bottom = max(actualContentSize, self.bottomLayoutGuide.length)
    }
    self.tableView.contentInset = inset
}

viewDidLayoutSubviews将自行调用,但每当我更新tableView中的数据时,我也必须手动调用它。

答案 1 :(得分:-1)

你正在寻找这个。根据您的需要更改内容偏移量。

self.tableView.contentOffset = CGPointMake(0, 100);