0

好的,所以我被卡住了。在我的应用程序中,我有一个产品视图。在这个视图中,滚动视图中有两个嵌套的表格视图。第一个表格视图只有一个单元格并保存静态文本。此文本长度是动态的,取决于您选择的产品。第二个表格视图由多个单元格组成,这些单元格基于链接到该产品的子产品数量。所以在 iOS 5 中,根据文本在第一个表视图中的大小来动态移动每个表视图的框架非常容易。然后我可以总结所有表格视图的高度,这将是滚动视图的高度。问题是当我打开自动布局时,事情变得很糟糕。据我了解,滚动视图已经改变。我们不能使用滚动视图的框架或内容大小。所以我做的第一件事就是把这一切都改成了约束。我在下面做了以下操作。

CGSize descriptionSize = [descriptionDetail sizeWithFont:
                         [UIFont systemFontOfSize:14]
                         constrainedToSize:CGSizeMake(320, CGFLOAT_MAX)
                         lineBreakMode:NSLineBreakByWordWrapping];

self.theScroller.translatesAutoresizingMaskIntoConstraints= NO;
[self.theScroller setContentInset:UIEdgeInsetsMake(0, 0, (descriptionSize.height+ (43 * [Solution count])), 0)];

现在上面的工作完美无缺。滚动视图滚动得很好,并且在启用自动布局的情况下是正确的高度。

现在我坚持的部分是如何根据描述的长度或第二个表格视图中有多少个单元格来动态地上下移动两个表格视图?表格视图的框架似乎对它们的位置没有任何影响。我试着弄乱约束,但似乎没有得到任何地方。任何帮助将不胜感激。谢谢

视图层次结构图

在此处输入图像描述

4

2 回答 2

2

我认为,通过使用单个 UITableView 完成所有这些操作,您可以让自己的生活更轻松。

带有 UIImageView 的上部 UIView 是 tableHeaderView,您的第一个“单行 UITableView”是 UITableView 中的第一部分,而具有动态内容的表格视图位于 UITableView 的其他部分中。

于 2013-05-22T19:55:37.973 回答
2

我相信您遇到的问题是滚动视图没有固有的大小。使用自动布局,它们会根据兄弟/父约束获得它们的大小,然后滚动任何不适合的内部内容。由于表格视图是精美的滚动视图,因此您需要告诉它们它们有多大,并根据内部内容手动更改它,而不是滚动或显示空白。

我不确定您的表格视图之间的关系是什么,但听起来第二个表格视图的顶部边缘应该与第一个表格视图的底部边缘相距固定距离,这在自动布局中很容易做到,只是选择两个表视图并固定垂直间距。固定第一个滚动视图的高度并在控制器中为约束创建一个出口,然后将以下内容添加到控制器中:

-(void) viewWillLayoutSubviews{
    [self.firstTableView layoutIfNeeded];
    self.firstTableViewHeightConstraint.constant = self.firstTableView.contentSize.height;
}

这将修复它,以便您的第一个表格视图与其内容的高度相同并且不会滚动。自动布局将负责将您的第二个表格视图向下移动。

于 2013-05-22T21:17:33.623 回答