Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/104.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在具有自动布局的UIScrollView中动态调整UITableView大小_Ios_Uitableview_Uiscrollview_Autolayout - Fatal编程技术网

Ios 在具有自动布局的UIScrollView中动态调整UITableView大小

Ios 在具有自动布局的UIScrollView中动态调整UITableView大小,ios,uitableview,uiscrollview,autolayout,Ios,Uitableview,Uiscrollview,Autolayout,关于自动布局和UIScrollViews有很多问题,但我认为这是不同的 我有一个这样的结构: - (void)viewDidLayoutSubviews { self.orderItemTableViewHeightConstraint.constant = self.orderItemTableView.contentSize.height - [self tableView:self.orderItemTableView heightForHeaderInSection:0];

关于自动布局和UIScrollViews有很多问题,但我认为这是不同的

我有一个这样的结构:

- (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;
}

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

TableView 1和TableView 2的高度必须是动态的。我不想让它们滚动,所以我需要将它们的帧高度设置为内容高度

我已经为每一个设置了高度约束,并且可以毫无问题地调整它们

当我试图调整容器视图的高度时,问题就出现了。最终,我不想搞乱它,让该视图根据其内容自动调整大小,但这似乎不起作用(如果我忽略容器视图的高度,我会在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;
}
我认为问题在于设置容器视图的高度约束导致了一些递归或其他问题

问题是:

  • 在这种情况下,是否有一种方法可以根据容器视图的内容使其高度保持流动
  • 如果没有,我如何以编程方式处理这个问题?我是不是在错误的地方修改了约束条件

  • 谢谢你的意见

    好的,在这里只是简单地描述代码,但经过多次尝试和错误,这似乎解决了断言失败问题,并给出了期望的结果:

    - (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];
    }
    
    我真的很想有更多的动力,但会在这一点上赢得比赛


    希望这对其他人有帮助。

    我曾经打电话给[self.view layoutifneed]解决了这个问题。一个简单的解决方案如我在这里所说: