具有完全自动布局的 iOS 中带有表格视图的三级手风琴布局
Posted
技术标签:
【中文标题】具有完全自动布局的 iOS 中带有表格视图的三级手风琴布局【英文标题】:Three-level accordion layout with table views in iOS with full auto-layout 【发布时间】: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
我希望我的设计符合以下要求:
自动布局,尽可能少的代码隐藏。 每个UITableView
s 都可以有动态数量的单元格。
UITableView
的每个单元格都可以具有动态高度,甚至可以在运行时改变。
任何级别的身高增加都应该促使所有父母将他们的身高增加到最顶层UIScrollView
的ContentView
。内部表格视图不能滚动,而是可以拉伸以适应其所有子内容。
当剖面视图*
处于折叠状态时,其内容应隐藏(隐藏 = true)并降低其高度。
*
、**
和 ***
视图除了任何子表外,还可以包含其他帮助视图,例如部分编号、侧线、UI 标签。
这甚至可能吗?我将不胜感激有关如何解决此问题的一般性建议。
我的目标是 iOS 9+。
【问题讨论】:
这是 100% 可能的。UITableView
只是 UIScrollView
的子类。 UIScrollView
具有自动布局功能,可以处理所有动态尺寸,而无需您在初始设置之外做出任何努力。 UITableViewCell
是 UIView
的子类,这是自动布局调整滚动视图内容所需的全部内容。把这些放在一起只需要一扇上锁的门、一部不插电的电话和全神贯注,因为它可能会开始变得令人费解——但绝对可行(当你一块一块地走时,有点直截了当)。
@iabuseservers 你能推荐任何可能突出与我的要求相关的陷阱和技巧的资源/教程吗(例如扩展至最顶层并在部分折叠时折叠)?
Apple 有专门用于将UIScrollView
与auto layout
结合使用的文档,这非常好。如果我没记错的话,他们有几个,你需要知道的一切都在其中。例如,如果我没记错的话,不要使用任何滚动视图的锚来确定其任何内容视图的大小。使用滚动视图的锚点确定定位,但使用view
(例如)确定大小。正确完成后,自动布局将为您处理所有更改。您可能需要在某些表格中禁用和启用滚动以获得更好的用户体验。
别忘了,滚动视图代表可以从UITableViewDelegate
访问。
【参考方案1】:
我认为通过将高度约束挂钩为 IBoulets 来改变内部约束的高度,自动布局一切皆有可能,但这是一个沉重的 UI 东西,似乎整个应用程序都堆叠在一个屏幕上,我建议至少移动问卷表视图到另一个屏幕
【讨论】:
我同意,但这是我们目前无法协商的视觉要求。是否必须通过插座手动更改高度限制?有没有办法让自动布局从下到上自动重新计算所有高度? 不,他可以使用框架布局来实现这一点不是强制性的,但是当内部框架发生变化时,他必须更改每个外部框架的大小,因为框架不会自动推动其他框架,这是它之间的主要区别并使用 layoutIfNeeded 自动布局每个外部更改以上是关于具有完全自动布局的 iOS 中带有表格视图的三级手风琴布局的主要内容,如果未能解决你的问题,请参考以下文章