我在更大的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上设置的属性会导致其框架始终自动匹配其内容大小?
答案 0 :(得分:0)
没有动态调整表格视图框架的属性。另外,我不认为UITableView
可以预先计算其整个contentSize
因为表格视图的大小实际上是无限的,这取决于其datasource
和其他代表的指定内容诸如heightForRowAtIndexPath
之类的方法。这些方法可以是动态的,因此几乎不可能预测表视图的整个大小。
我的结论是你可能没有正确使用这个UI元素。
解决方法:
通过将表视图的框架约束到滚动视图的可见区域,您可以简单地允许它滚动。也许您需要在滚动表视图时阻止滚动视图滚动,反之亦然。您可以在UIScrollView
委托方法中轻松完成此操作。
答案 1 :(得分:0)
我需要在iOS 8中做这样的事情:滚动视图包含一个非滚动的固定宽度表视图,其中包含可变数量的内容行,所以我想动态调整表视图的高度。 / p>
对我来说有用的是使用虚拟值在表视图上设置高度约束,然后为表视图和约束创建出口。那就是我所需要的一切:
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.)
}
我可以想象情况(可能有很多行或可变高度的行),这可能不是那么简单,但这对我有用。