如何在情节提要失败的情况下使用大量表格视图单元格和自动布局约束来布局复杂视图

Posted

技术标签:

【中文标题】如何在情节提要失败的情况下使用大量表格视图单元格和自动布局约束来布局复杂视图【英文标题】:How to layout complicated view with lots of tableview cells and autolayout constrainsts where storyboard is failing 【发布时间】:2017-10-19 03:01:03 【问题描述】:

我有这样的看法

基本上它有很多静态表格视图单元格,其中每个单元格都有水平滚动视图和堆栈视图。现在在 storyboard 中尝试这个已经完全减慢了它,在 Xcode 9 中添加或删除一个约束或只是更改标签文本需要 30 多秒,而且总是有一个旋转的沙滩球。 有哪些方法可以减少系统过载或加快情节提要。 或者是更好地在代码中布局视图。在这种情况下,我们将非常欢迎这方面的任何帮助/建议。 提前感谢您的努力。

Here is the link to GitHub repo for the same

【问题讨论】:

我知道这很令人沮丧。但我认为你几乎无能为力。您拥有的视图层次结构和布局越多,它变得越慢。请放心,UIStackView 里面的 UITablewView 肯定会让人头疼。 把它分成多个xib,然后在代码中组合,这比把所有东西都放在一个故事板里要好 我必须从用户那里获得大量输入,如果我将它分成多个 xib,我必须使用大量自定义委托将数据传递到视图控制器和后续计算,以及传递周围的数据。在这种情况下,对于每个单元格,单元格的一部分用于输入,一部分用于输出。 我认为@Tj3n 的解决方案是你能做的最好的。当然,您必须编写一些委托来通过您的单元格、表格视图、控制器等传递数据。但是如果您将所有内容放在一个故事板中,为了访问每个单元格的不同部分,您可能需要使用它们的标签。虽然我建议使用不同的 xib 文件,但您也可以使用 SnapKit、PureLayout 等库以编程方式在单元格中布局视图。 IBDesignables。使用 xibs 将公共组件提取到视图中。坦率地说,如果您不开始将事物分解为组件,那么您的控制器将有数千行。 【参考方案1】:

您应该使用一些原型单元,而不是重复几乎相同的静态单元。您在这里最多有 6 种不同类型的单元格。例如,输入 A、D、E 相同。输入 B、C、F 相同。

详细说明如何做到这一点超出了问题的范围,但基本过程如下。

假设您要添加一个原型单元格,可用于输入 B、C 和 F。这是您最基本的输入单元格,将有一个文本字段。

    向您的项目添加一个继承自 UITableViewCell 的新类。 将其命名为 BasicInputCell。 打开故事板,选择表格视图并打开属性检查器。将 Prototype Cells 设置增加 1。Xcode 将在情节提要的表格视图中添加一个原型单元 选择原型单元并打开身份检查器。将 Class name 设置为单元格的名称,BasicInputCell。 打开属性检查器并将标识符设置为相同的值,以便您可以通过此名称将其出列。 在情节提要的单元格中添加一个文本字段。打开 Assistant Editor 并控制从文本字段拖动到您的类以创建 IBOutlet。 根据需要重复多个独特的细胞类型。根据需要使用不同的控件(例如日期选择器)自定义每种单元格类型。

在您的表格视图控制器中,根据索引路径将所需类型的单元格出列。

【讨论】:

是的,我同意。怎么做 。我应该使用故事板还是在代码中布局它。我现在倾向于使用代码,但根据 Apple 自动布局指南,只有在完全确信无法通过情节提要正确布局视图时才应该使用编码。我想要一些关于如何做到这一点的建议。 我会推荐一个故事板。请参阅我的更新答案。祝你好运!

以上是关于如何在情节提要失败的情况下使用大量表格视图单元格和自动布局约束来布局复杂视图的主要内容,如果未能解决你的问题,请参考以下文章

主从情节提要:表格视图不显示单元格(Objective-C)

具有自定义布局的 UICollectionView - 无法在情节提要中添加补充视图

使用 xcode 4.5 在情节提要中设计滚动视图

在情节提要中自定义表格视图单元格时出现 NSInternalInconsistencyException

如何使用 LGSideMenuController 推送带有情节提要标识符的视图控制器?

使用情节提要在 UItableview 上浮动按钮