我有一个uiview视图的uiview作为nib中的子视图。 然后,我将另一个带有uitableview的uiview作为另一个uiview的子视图(在此视图中的其他元素中)加载为uiscrollview的子视图。
即UISCrollView - > UIView - > UITableView(以及UIView中的一些其他视图)。
我需要做以下事情:
一旦我知道了tableview的最终高度(取决于单元格的数量和高度),我需要调整包含它的uiview的大小,然后调整包含滚动视图的contentSize属性的大小。
但是我不知道tableview的最终大小在哪个时候是已知的(因为它可以根据其单元格保存的文本量动态地改变大小)而且我也不知道tableview会超出多少uiview(默认为320 x 460)。
我已尝试在viewdidload上将包含tableview的视图设置为高度900并将其设置为sizeToFit,希望它会随着tablecells添加到tableview而缩小(假设添加了单元格,tableview的框架将适当缩放) 。但这似乎不起作用。
有什么想法? 谢谢!
答案 0 :(得分:5)
我刚遇到了类似的情况(UIScrollView - > UITableView),并且几个小时就撞到了它。简短的回答是:在我的ViewController(管理UIScrollView)发送viewWillAppear:
之前,用作调整大小的基础的正确大小是不可用的。在此之前,我发现价值已经确定,但往往是错误的。 (例如,我第一次尝试这样做是在viewDidLoad:
,并且调整值 在那里发生了变化,但它们错误!)
所以我的解决方案是:
viewDidLoad:
中,一旦您准备好数据,就会将随附的UITableView设为reloadData
。在viewWillAppear:
中执行以下操作(假设tableView
是随附的UITableView,而scrollView
是封闭的UIScrollView):
tableView.frame = (CGRect){
tableView.frame.origin,
tableView.contentSize
};
// Finally, set content size based on the last element in the scrollView
// in my case, the last element IS the tableView, yours might be different
scrollView.contentSize =
CGSizeMake(scrollView.width
- scrollView.contentInset.left
- self.scrollView.contentInset.right,
tableView.top
+ tableView.height);
N.B。当我在viewWillAppear:
之前检查它们时,我得到了一些非常奇怪的数字;例如,tableView.contentSize似乎是默认rowHeight *行数的乘积,忽略了我的自定义行高度并排除了任何分隔符!很奇怪。
答案 1 :(得分:0)
这只是一个猜测,但由于UITableView是UIScrollView的子类,你可以在调用reloadData之后使用contentSize属性来查看它的整体大小吗?您可以使用tableview的大小来调整UIView和scrollView的contentSize。