UITableView:以编程方式更改页脚视图的大小无效。

23

我的表格视图的页脚是一个显示某个用户推文的视图,因此在获取推文之前不知道其高度,我创建了一个FooterViewController,并添加了一个refreshTweets方法,在viewDidLoad中添加它:

FooterViewController *controller = [[FooterViewController alloc] initWithNibName...];
[[self tableView] setFooterView:[controller view]];
[controller refreshTweets];

refreshTweets方法中,我读取推文并计算总高度,并重置视图(页脚)的高度:

self.view.frame = newFrame;

但这并没有什么意义,页脚的高度仍然是我在Interface Builder中设置的高度,是否有任何遗漏或其他替代方法可以解决?

谢谢!

编辑: 我可以在Interface Builder中将视图大小更改为足够小,然后在计算推文高度并设置view.frame后放大它,但是表格视图仍然认为它的页脚具有先前的高度,也就是多余的空间位于表格视图之外,只有在拖动表格时才能看到它。

2个回答

52
myTable.tableFooterView = myFooterView;
重新将页脚视图分配给表格。表格将识别它有一个新的页脚,并重新执行任何需要发生的布局以适应页脚的正确大小。

2
一个有帮助的(并且更冗长)链接可能是关于调整tableHeaderView大小的这篇文章;同样适用于tableFooterView:http://davidjhinson.wordpress.com/2009/03/24/resizing-a-uitableviews-tableheaderview/ - weienw
这在iOS11上不起作用,但是这里有一个类似的答案可以使用:https://dev59.com/dGQn5IYBdhLWcg3w7KrS#28102175 - Skoua

0

为了改变页脚视图的框架,这里有一个简单的小技巧:

在Swift中:

func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
    return 0.5
}


func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
    let footerView = UIView()
    let footerChildView = UIView(frame: CGRect(x: 60, y: 0, width: tableView.frame.width - 60, height: 0.5))
    footerChildView.backgroundColor = UIColor.darkGray
    footerView.addSubview(footerChildView)
    return footerView
}

5
这个问题是关于tableview的footerView,而不是特定section的tableview,这是不同的。 - Will

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接