【问题标题】:Adjust the size of UITableView dynamically which would display as a non-scrollable list of content动态调整 UITableView 的大小,显示为不可滚动的内容列表
【发布时间】:2017-08-30 21:52:37
【问题描述】:
我正在使用 Swift 3.0 开发一个项目,它在 UIScrollView 中有一个 UITableView,它已经设置了它的约束。
要求是在这个 UITableView 中显示将从数组返回的歌曲列表,但是这个 UITableView 的大小应该根据数组的大小动态排列,所以我不需要滚动 UITableView,因为我可以看到 UITableView 中的所有歌曲(这个 UITableView 在我的 scrollView 内,所以我可以使用我的 scrollView 在列表中向上或向下移动)。
我将如何实现这一目标?
【问题讨论】:
标签:
ios
swift
uitableview
swift3
uiscrollview
【解决方案1】:
你可以根据内容改变tableview的高度。
var frame = tableView.frame
frame.size.height = tableView.contentSize.height
tableView.frame = frame
如果您使用自动布局,则为 tableview 高度创建 outlet,并将 tableview 内容大小分配给它的常量。
tableviewHeightConstraint.constant = tableview.contentSize.height
【解决方案2】:
1.为tableView创建一个子类并覆盖intrinsicContentSize。
class MyOwnTableView: UITableView {
override var intrinsicContentSize: CGSize {
self.layoutIfNeeded()
return self.contentSize
}
override var contentSize: CGSize {
didSet{
self.invalidateIntrinsicContentSize()
}
}
override func reloadData() {
super.reloadData()
self.invalidateIntrinsicContentSize()
}
}
2。在 Interface builder 中,将 tableView 的类更改为 MyOwnTableView(UITableView 的子类)。
-
为表格视图设置自动行高。
tableView.estimatedRowHeight = 60.0
tableView.rowHeight = UITableViewAutomaticDimension