具有自动布局的UIScrollView中的动态大小的UITableView

Rac*_*eur 4 uitableview uiscrollview ios autolayout

关于自动布局和UIScrollViews有一百万个问题,但我认为这是不同的.

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

调整大小示例

白色背景是一个UIView,它充当UIScrollView中的容器(获取滚动视图以构建其自己的内容大小的典型设置,以便它根据容器视图正确滚动).

TableView 1和TableView 2需要具有动态的高度.我不希望它们滚动,所以我需要将它们的帧高度设置为等于它们的内容高度.

我有IBOutlets用于每个这些的高度约束,并且可以毫无问题地调整它们.

当我尝试调整容器视图的高度时出现问题.最后,我想不必弄乱它并让该视图根据其内容自动调整大小,但这似乎不起作用(如果我忽略容器视图的高度,我会在IB中收到警告/错误关于约束).

如果我为容器视图的高度约束创建一个插座并设置它,我得到一个断言失败:

*** Assertion failure in -[UIView layoutSublayersOfLayer:], /SourceCache/UIKit_Sim/UIKit-2935.137/UIView.m:8803
Run Code Online (Sandbox Code Playgroud)

我在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;
}
Run Code Online (Sandbox Code Playgroud)

我认为问题是设置容器视图的高度约束导致一些递归或某事......

问题:

  1. 在这种情况下,有没有办法让容器视图的高度根据其内容流动?
  2. 如果没有,我该如何以编程方式处理?我是在错误的地方改变约束吗?

感谢您的任何意见!

Rac*_*eur 8

好吧,好吧,只是在这里拍摄代码,但经过多次试验和错误,这似乎解决了断言失败并给出了所需的结果:

- (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];
}
Run Code Online (Sandbox Code Playgroud)

真的想让这个更有活力,但在游戏的这一点上取胜!

希望这有助于其他人.

  • 调用[self.view layoutIfNeeded]曾经为我做过这个伎俩. (5认同)