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

Posted

技术标签:

【中文标题】iOS 6 AutoLayout 与多个 tableviews 所有动态高度【英文标题】:iOS 6 AutoLayout with multiple tableviews all dynamic heights 【发布时间】:2013-05-22 19:18:30 【问题描述】:

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

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

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

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

这真是个好主意!不知道为什么我以前没有想到这一点。我的一部分认为我之前尝试过这个并遇到了问题。我会再试一次,看看我想出了什么。感谢您的建议。 如果 tableHeaderView 不起作用,您也可以尝试使用两种不同的表格单元格类型 - 一种用于图像,另一种用于其余部分。 刚刚实现了一个表视图方法。奇迹般有效!谢谢你的主意。不敢相信我之前没有想到这一点,哈哈。【参考方案2】:

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

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

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

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

【讨论】:

感谢您的想法。听起来它会起作用。我最终采用了单表视图方法。

以上是关于iOS 6 AutoLayout 与多个 tableviews 所有动态高度的主要内容,如果未能解决你的问题,请参考以下文章

带有约束的 iOS 6.0 AutoLayout 问题:旋转时子视图消失

IOS 6.0+ Autolayout — UITableViewCell 高度调整

将 autoLayout 约束应用于多个对象

iOS适配:Masonry介绍与使用实践:快速上手Autolayout

Autolayout第三方库Masonry的入门与实践

iOS自动布局多个高度