假设我有一个带有动态内容的UITableView
,但想象一下它包含一个由100px和6行á44px的表头组成的部分。
请记住,可能有1个部分有2行,或4个部分,10行等,完全是动态的。
当tableView显示其内容时,我根本无法滚动(仅反弹),因为tableView中的所有内容都是可见的。
我需要能够滚动100px的节标题,在底部提供更多的空白空间。只有足够的空间使标题在外面,第一个单元格位于最顶层。
为了达到这个目的,我可以存储每个不同单元格的原型实例并“手动”计算总单元格的高度,然后添加一个幻像单元格(或一个截面页脚)需要高度。我觉得应该有更好的方式。
如果集体细胞高度大于可见屏幕,那么我希望一切都正常,底部没有额外的空间。
我尝试在tableView.contentSize
之后手动设置reloadTable
为max(tableView.bounds.size.height+100, tableView.contentSize)
,但似乎无论我做什么都会覆盖contentSize,所以我试图找到其他方法来做到这一点。
答案 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);