【发布时间】:2018-01-10 19:15:22
【问题描述】:
我计划在 iOS 中实现一个非常复杂的问卷手风琴布局,其结构类似于以下:
Root View
|_ UIScrollView
|_ ContentView
|_ UILabel
|_ UITableView (cells = expandable questionnaire sections)
|_ UIView (* table cell, view for a section)
|_ UITableView (cells = questionnaire question groups)
|_ UIView (** table cell, view for a question group)
|_ UITableView (cells = questionnaire questions)
|_ UIView (*** table cell, view for a question)
|_ ImageView
我希望我的设计符合以下要求:
- 自动布局,尽可能少的代码隐藏。
- 每个
UITableViews 都可以有动态数量的单元格。 -
UITableView的每个单元格都可以具有动态高度,甚至可以在运行时改变。 - 任何级别的身高增加都应该促使所有父母将他们的身高增加到最顶层
UIScrollView的ContentView。内部表格视图不能滚动,而是可以拉伸以适应其所有子内容。 - 当剖面视图
*处于折叠状态时,其内容应隐藏(隐藏 = true)并降低其高度。 -
*、**和***视图除了任何子表外,还可以包含其他帮助视图,例如部分编号、侧线、UI 标签。
这甚至可能吗?我将不胜感激有关如何解决此问题的一般性建议。
我的目标是 iOS 9+。
【问题讨论】:
-
这是 100% 可能的。
UITableView只是UIScrollView的子类。UIScrollView具有自动布局功能,可以处理所有动态尺寸,而无需您在初始设置之外做出任何努力。UITableViewCell是UIView的子类,这是自动布局调整滚动视图内容所需的全部内容。把这些放在一起只需要一扇上锁的门、一部不插电的电话和全神贯注,因为它可能会开始变得令人费解——但绝对可行(当你一块一块地走时,有点直截了当)。 -
@iabuseservers 你能推荐任何可能突出与我的要求相关的陷阱和技巧的资源/教程吗(例如扩展至最顶层并在部分折叠时折叠)?
-
Apple 有专门用于将
UIScrollView与auto layout结合使用的文档,这非常好。如果我没记错的话,他们有几个,你需要知道的一切都在其中。例如,如果我没记错的话,不要使用任何滚动视图的锚来确定其任何内容视图的大小。使用滚动视图的锚点确定定位,但使用view(例如)确定大小。正确完成后,自动布局将为您处理所有更改。您可能需要在某些表格中禁用和启用滚动以获得更好的用户体验。 -
别忘了,滚动视图代表可以从
UITableViewDelegate访问。
标签: ios uitableview uiscrollview accordion ios-autolayout