我想设置UITableView以匹配表视图中所有内容的高度.
这是我的故事板
这个问题是顶部和底部的ImageView在屏幕上始终是静态的.
假设桌面视图中有10个项目,但由于屏幕尺寸限制,只有7个项目显示.我希望在用户能够看到底部的ImageView之前显示所有10个.(顺便说一句,所有3个视图,即图像视图和tableview都在uiscrollview中)
理想
我必须处理的一些其他限制是表视图中的项目数是动态的,这意味着它可以是任何通常小于10的数量,我稍后将从api中检索.根据内容,细胞高度也是动态的.
我刚刚开始使用一些简单的代码
class ExampleViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { @IBOutlet weak var tableView: UITableView! var items: [String] = [ "Item 01", "Item 02", "Item 03", "Item 04", "Item 05", "Item 06", "Item 07", "Item 08", "Item 09", "Item 10"] override func viewDidLoad() { super.viewDidLoad() self.tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "cell") } func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return self.items.count; } func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { let cell:UITableViewCell = self.tableView.dequeueReusableCellWithIdentifier("cell")! as UITableViewCell cell.textLabel?.text = self.items[indexPath.row] return cell } }
Cody.. 16
将您的UITableView子类化以覆盖intrinsicContentSize为其contentSize,如下所示:
override var intrinsicContentSize: CGSize { return contentSize }
然后为表使用自动行高,因此exampleViewController的viewDidLoad将具有:
tableView.estimatedRowHeight = 44
和UITableViewDelegate函数:
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { return UITableViewAutomaticDimension }
当您从API接收数据并重新加载表时,只需致电:
tableView.invalidateIntrinsicContentSize()
这将告诉您的表格将其自身调整为与其内容相同的大小(因为覆盖),并根据需要移动底部图像.
如果你的故事板抛出一个错误,说UIScrollView的高度不明确,因为UITableView上没有高度限制,请选择你的UITableView并在Size Inspector中给它一个占位符内在大小.
将您的UITableView子类化以覆盖intrinsicContentSize为其contentSize,如下所示:
override var intrinsicContentSize: CGSize { return contentSize }
然后为表使用自动行高,因此exampleViewController的viewDidLoad将具有:
tableView.estimatedRowHeight = 44
和UITableViewDelegate函数:
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { return UITableViewAutomaticDimension }
当您从API接收数据并重新加载表时,只需致电:
tableView.invalidateIntrinsicContentSize()
这将告诉您的表格将其自身调整为与其内容相同的大小(因为覆盖),并根据需要移动底部图像.
如果你的故事板抛出一个错误,说UIScrollView的高度不明确,因为UITableView上没有高度限制,请选择你的UITableView并在Size Inspector中给它一个占位符内在大小.