【发布时间】:2020-09-14 04:31:16
【问题描述】:
我正在寻找一种实现布局的方法,如下所示:
本质上,它由UICollectionViewCell 和其中的UITableView 实例组成。 UICollectionViewCell 包含很少的其他补充元素,但这些与此问题无关。
我希望 UITableView 完全展开,即显示所有单元格。我选择了UITableView,因为它正是我需要的风格。
问题是UITableView 没有完全展开。从技术上讲,我希望UITableView 的大小等于它的contentSize。
我正在使用 AutoLayout 来计算 UICollectionViewCell 的大小,因此“可调整大小”的 UITableView 会派上用场。
到目前为止,我已经尝试过使用这种方法:
import UIKit
final class FullSizeTableView: UITableView {
override var intrinsicContentSize: CGSize {
return contentSize
}
}
然后在UICollectionViewCell 中使用FullSizeTableView:
我已将UITableView 限制在所有 4 个侧面,顶部到 UIStackView,底部、左侧和右侧到 ContentView。
但是,结果如下所示:
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 4 /// Meanwhile, Returning 4 rows in the DataSource
}
所以,我猜,AutoLayout 似乎不尊重UITableView 的实际大小。
我没有考虑到哪些潜在的陷阱?
我对@987654345@ 的目标是始终完全展开并以全尺寸显示。
更新1:
【问题讨论】:
-
UITableView is-a UIScrollView。内部内容(单元格)永远不会强制滚动视图展开。您需要使用显式约束来强制执行高度。尽管您使用 intrinsicContentSize 的方法看起来确实是一条逻辑路径,但滚动视图很奇怪。
-
我认为禁用可滚动的tableview来实现这一点。
-
@King.lbt 它已经被禁用,所以不起作用。
-
@WarrenBurton 有趣的建议。我应该限制什么?
-
您在控制台中是否有任何突破性限制?跟进@WarrenBurton 的评论,如果您的表格视图行不是动态高度,您可以向表格视图添加高度约束
numberOfRows * rowHeight。但在这一点上,我会质疑表视图的使用。因为一个完整的高度表视图将一次分配所有单元格而不做任何出队。您不妨只使用滚动视图并自己添加子视图。
标签: ios swift uitableview autolayout uicollectionviewcell