使用Storyboards和Autolayout,我有一个带有UIScrollView的UIViewController作为主视图.我在滚动视图中嵌入了几个容器视图.其中一些嵌入式容器视图包含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,我不想为每个容器视图创建一个新的委托协议.我认为我不能制定我具有通用性的协议.
有任何想法吗?
解决方法
这是我最终做的事情:
// In my embedded UITableViewController: - (void)viewDidLoad { [super viewDidLoad]; self.tableView.rowHeight = UITableViewAutomaticDimension; self.tableView.estimatedRowHeight = 60.0; // via storyboards,this viewController has been embeded in a containerView,which is // in a scrollView,which demands a height constraint. some rows from our static tableView // might not display (for lack of data),so we need to send our table's height. we'll force // layout early so we can get our size,and then pass it up to our delegate so it can set // the containerView's heightConstraint. [self.tableView layoutIfNeeded]; self.sizeForEmbeddingInContainerView = self.tableView.contentSize; } // in another embedded view controller: - (void)viewDidLayoutSubviews { [super viewDidLayoutSubviews]; self.sizeForEmbeddingInContainerView = self.tableView.contentSize; } // then,in the parent view controller,I do this: // 1) ensure each container view in the storyboard has an outlet to a height constraint // 2) add this: - (void)viewDidLayoutSubviews { [super viewDidLayoutSubviews]; self.placeDetailsContainerHeightConstraint.constant = self.placeDetailsTableViewController.sizeForEmbeddingInContainerView.height; self.secondaryExperiencesContainerHeightConstraint.constant = self.secondaryExperiencesViewController.sizeForEmbeddingInContainerView.height; }
我还没有这样做,但最好创建一个具有CGSize sizeForEmbeddingInContainerView属性的协议,每个子视图控制器都可以采用.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。