【发布时间】:2023-03-08 13:10:01
【问题描述】:
使用 Storyboards 和 Autolayout,我有一个 UIViewController 和一个 UIScrollView 作为主视图。我在滚动视图中嵌入了几个容器视图。其中一些嵌入式容器视图包含 UITableViews,每个都有不同高度的单元格。我需要 tableView 的高度足够大,以便一次显示所有单元格,因为 tableView 上的滚动将被禁用。
在主 UIViewController 中,必须定义容器视图的高度才能使滚动视图正常工作。这是有问题的,因为一旦所有不同高度的单元格完成渲染,我就无法知道我的 tableView 会有多大。 如何在运行时调整容器视图的高度以适应非滚动 UITableView?
到目前为止,我已经完成了以下工作:
// in embedded UITableViewController
//
- (void)viewDidLoad {
// force layout early so I can determine my table's height
[self.tableView layoutIfNeeded];
if (self.detailsDelegate) {
[self.detailsTableDelegate didDetermineHeightForDetailsTableView:self.tableView];
}
}
// in my main UIViewController
// I have an IBOutlet to a height constraint set up on my container view
// this initial height constraint is just temporary, and will be overridden
// once this delegate method is called
- (void)didDetermineHeightForDetailsTableView:(UITableView *)tableView
{
self.detailsContainerHeightConstraint.constant = tableView.contentSize.height;
}
效果很好,我对结果很满意。但是,我还有一两个容器视图要添加,它们将具有非滚动 tableViews,并且我不想为每个容器视图创建一个新的委托协议。我不认为我可以使我拥有的协议通用。
有什么想法吗?
【问题讨论】:
-
我面临着类似的问题。您找到解决方案了吗?
-
@ntsh 我刚刚添加了自己的答案。看看是否对你有帮助
-
谢谢。通过使用 tableView 的 contentSize,我也得到了类似的解决方案。
标签: ios objective-c uitableview storyboard autolayout