设置 UITableView 的框架以匹配其内容大小
Posted
技术标签:
【中文标题】设置 UITableView 的框架以匹配其内容大小【英文标题】:Setting frame of a UITableView to match its content size 【发布时间】:2012-03-31 13:29:00 【问题描述】:我在较大的 UIScrollView 中有一个非滚动 UITableView。由于表格视图是非滚动的,我希望它的框架大小总是匹配它的内容大小。
我调用了以下方法:
- (void)resizeTableViewFrameHeight
// Table view does not scroll, so its frame height should be equal to its contentSize height
CGRect frame = self.tableView.frame;
frame.size = self.tableView.contentSize;
self.tableView.frame = frame;
问题是我必须在错误的时间调用此方法(在设置 contentSize 之前)。我想知道,我可以在 UITableView 上设置一个属性,使其框架始终自动匹配其内容大小吗?
【问题讨论】:
【参考方案1】:没有动态调整表格视图框架的属性。另外,我不认为UITableView
可以预先计算其整个contentSize
,因为表格视图的大小实际上可能是无限的,这取决于从其datasource
和其他委托方法(例如heightForRowAtIndexPath
)中指定的内容.这些方法可以是动态的,因此几乎不可能预测 table view 的整个大小。
我的结论是您可能没有正确使用此 UI 元素。
解决方法:
通过将表格视图的框架限制在滚动视图的可见区域,您可以简单地允许它滚动。也许您需要防止滚动视图在表格视图滚动时滚动,反之亦然。您可以在UIScrollView
委托方法中轻松完成此操作。
【讨论】:
感谢您的意见。我不能让我的表格视图滚动,这对我的 UI 没有意义。但我想我只需要自己调整框架的大小。【参考方案2】:我需要在 ios 8 中做这样的事情:一个滚动视图,其中包含一个非滚动的固定宽度表格视图,内容行数可变,所以我想动态调整表格视图的高度。
对我有用的是使用虚拟值在表视图上设置高度约束,然后为表视图和约束创建出口。那么这就是我所需要的:
class ViewController: UIViewController, UITableViewDataSource
@IBOutlet weak var tableViewHeightConstraint: NSLayoutConstraint!
@IBOutlet weak var tableView: UITableView!
override func viewDidAppear(animated: Bool)
super.viewDidAppear(animated)
tableViewHeightConstraint.constant = tableView.contentSize.height
// (plus additional data source methods, etc.)
我可以想象这样的情况(可能有很多行,或高度可变的行)可能不是那么简单,但这对我有用。
【讨论】:
以上是关于设置 UITableView 的框架以匹配其内容大小的主要内容,如果未能解决你的问题,请参考以下文章
设置 UICollectionViewLayout 以匹配列拆分 UITableView 类似结果
如何将 UITableView 高度更改为其内容高度并且仍然具有可点击的内容?