2014-06-17 57 views
3

有关于自动布局和UIScrollViews的一百万个问题,但我认为这是不同的。UIScrollView中的动态大小的UITableView具有自动布局

我有一个结构,看起来像这样:

Resizing Example

的白色背景是充当(一个UIScrollView内的容器中获取滚动视图建立自己的内容的典型设置一个UIView大小,因此它基于容器视图正确滚动)。

TableView 1和TableView 2需要它们的高度是动态的。我不希望他们滚动,所以我需要设置他们的框架高度等于他们的内容高度。

我有IBOutlets的高度约束每个这些,并可以调整他们没有问题。

当我尝试调整容器视图的高度时出现问题。最终,我不想惹恼它,并让该视图根据其内容自动调整大小,但这似乎并不奏效(如果我离开容器视图的高度,我会在IB中看到警告/错误关于约束)。

如果我创建一个容器出口视图的高度约束和设置,我得到一个断言失败:

*** Assertion failure in -[UIView layoutSublayersOfLayer:], /SourceCache/UIKit_Sim/UIKit-2935.137/UIView.m:8803 

我做了约束在viewDidLayoutSubviews调整这样的:

- (void)viewDidLayoutSubviews { 
    self.orderItemTableViewHeightConstraint.constant = self.orderItemTableView.contentSize.height - [self tableView:self.orderItemTableView heightForHeaderInSection:0]; 
    self.shippingOptionTableViewHeightConstraint.constant = self.shippingMethodTableView.contentSize.height; 
    self.scrollViewContainerViewHeightConstraint.constant = self.cardInfoLabel.$bottom + 60; 
} 

我相信问题是设置容器视图的高度约束是造成一些递归或...

问题:

  1. 有没有办法让容器视图的高度基于它的内容在这种情况下是流畅的?
  2. 如果不是,我该如何处理这个编程?我是否改变了错误的地方或其他方面的限制?

感谢您的任何意见!

+0

一个简单的办法是像我放在这里: http://stackoverflow.com/a/28184351/981979 – Donald

回答

7

好了,好了,只是shotgunning代码在这里,但要经过反复试验,这似乎解决了断言失败,并给出了期望的结果:

- (void)viewDidLayoutSubviews { 
    self.orderItemTableViewHeightConstraint.constant = self.orderItemTableView.contentSize.height - [self tableView:self.orderItemTableView heightForHeaderInSection:0]; 
    self.shippingOptionTableViewHeightConstraint.constant = self.shippingMethodTableView.contentSize.height; 

    [self.view layoutIfNeeded]; 

    self.scrollViewContainerViewHeightConstraint.constant = self.cardInfoLabel.$bottom + 60; 

    [self.view layoutIfNeeded]; 
} 

真的想有这样的更加动感,但将在比赛中取胜!

希望这可以帮助别人。

+5

调用[self.view layoutIfNeeded一旦奏效了我。 – Raz

+0

@Raz - 好点。干杯! – Raconteur

相关问题