当前位置:  开发笔记 > 编程语言 > 正文

动态UITableView高度

如何解决《动态UITableView高度》经验,为你挑选了1个好方法。

我想设置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中给它一个占位符内在大小.



1> Cody..:

    将您的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中给它一个占位符内在大小.

推荐阅读
php
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有