缩放UIScrollView contentSize以适应具有可变高度的UITableView的UIView

我有一个uiscrollview作为子视图中的子视图。 然后,我加载一个uitableview作为这个其他uiview的子视图(在这个视图中的其他元素之间)作为uiscrollview的子视图。

也就是说,UISCrollView – > UIView – > UITableView(和UIView中的一些其他视图)。

我需要做以下事情:

一旦我知道tableview的最终高度(取决于单元格的数量和高度),我需要调整包含它的uiview的大小,然后调整包含scrollview的contentSize属性的大小。

但是我不知道tableview的最终大小是在哪一点上是已知的(因为它可以根据它的单元格的文本量dynamic地改变大小),我也不知道tableview会超过uiview默认情况下是320 x 460)。

我已经尝试将包含tableview的视图设置为900到viewdidload的高度,并将其设置为sizeToFit,希望它会缩小tabletable添加到tableview(假设单元格被添加tableview的框架可以适当缩放)。 但是这似乎不起作用。

有什么想法吗? 谢谢!

我刚刚遇到了类似的情况(UIScrollView – > UITableView),几个小时,我的头撞它。 简单的答案是:直到我的ViewController(pipe理UIScrollView)被发送viewWillAppear:才能使用正确的大小作为大小事情的基础。 在此之前,我发现价值观已经确定,但往往是错误的。 (比如说,我第一次尝试这样做的时候,就是在这里看到的,那里的尺寸值已经改变了,但是他们错了 !)

所以我的解决办法是:

  • 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); 

注意,当我在viewWillAppear:之前检查他们时,我得到了一些非常奇怪的数字。 例如,tableView.contentSize似乎是默认rowHeight *行数的产物,忽略了我自定义的行高,排除了任何分隔符! 很奇怪。

这只是一个猜测,但由于UITableView是UIScrollView的子类,您可以在调用reloadData之后使用contentSize属性来查看其整体大小吗? 你可以使用tableview的大小来调整UIView和scrollView的contentSize。