iOS 6 AutoLayout具有多个tableviews所有动态高度

时间:2013-05-22 19:18:31

标签: ios objective-c uitableview ios6 autolayout

好的,所以我被卡住了。在我的应用程序中,我有一个产品视图。在此视图中,滚动视图中有两个嵌套的表视图。第一个tableview只有一个单元格并保存静态文本。这个文本长度是动态的,基于你选择的自豪感。第二个tableview包含多个单元格,这些单元格基于与该产品链接的子产品数量。因此,在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)];

现在上面这个完美无瑕。滚动视图滚动很好,并且是自动布局的正确高度。

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

Picture of view hierarchy

enter image description here

2 个答案:

答案 0 :(得分:2)

通过使用我认为的单个UITableView,您可以让自己的生活变得更轻松。

你的UIImageView的上层UIView是tableHeaderView,你的第一个“单行UITableView”是UITableView的第一部分,你的带有动态内容的表视图位于UITableView的更多部分。

答案 1 :(得分:2)

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

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

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

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