我有一个带有 uiscrollview 的 uiview 作为 nib 中的 subview 。
然后,我加载另一个带有 uitableview 的 uiview 作为另一个 uiview 的 subview (在此 View 内的其他元素中)作为 uiscrollview 的 subview 。
即 UISCrollView -> UIView -> UITableView (以及 UIView 内部的一些其他 View )。
我需要执行以下操作:
一旦我知道了 tableview 的最终高度(取决于单元格的数量和它们的高度),我需要调整包含它的 uiview 的大小,然后调整包含 ScrollView 的 contentSize 属性的大小。
但我不知道tableview的最终大小在哪一点是已知的(因为它可以根据其单元格将容纳的文本量动态改变大小),我也不知道tableview会超过uiview多少(默认为 320 x 460)。
我尝试在 viewdidload 上将包含 tableview 的 View 设置为 900 的高度并将其设置为 sizeToFit,希望它会随着 tablecells 添加到 tableview 而缩小(假设添加单元格时 tableview 的框架会适本地缩放)。但这似乎不起作用。
有什么想法吗?
谢谢!
最佳答案
我刚刚遇到了类似的情况(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);
注意,当我在
viewWillAppear:
之前检查它们时,我得到了一些非常奇怪的数字。 ;例如,tableView.contentSize 似乎是默认 rowHeight * 行数的乘积,忽略了我的自定义行高并排除了任何分隔符!很奇怪。
关于iphone - 缩放 UIScrollView contentSize 以适应内部具有可变高度 UITableView 的 UIView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7508517/