Ios UITableView中Rowat和set rowHeight的高度差异

Ios UITableView中Rowat和set rowHeight的高度差异,ios,swift,uitableview,Ios,Swift,Uitableview,我在同一个视图控制器中有两个tableview,tableview1和tableview2,两个tableview中的单元格高度都是固定的,我还为它们设置了delegate和dataSource,唯一的区别是tableview1在我进入视图控制器时已经有了数据,但是tableview 2不要这样做 我的问题是我可以通过func tableView(\utableview:UITableView,heightForRowAt indexath:indexPath)->CGFloat设置tableV

我在同一个视图控制器中有两个tableview,
tableview1
tableview2
,两个tableview中的单元格高度都是固定的,我还为它们设置了
delegate
dataSource
,唯一的区别是
tableview1
在我进入视图控制器时已经有了数据,但是
tableview 2
不要这样做

我的问题是我可以通过
func tableView(\utableview:UITableView,heightForRowAt indexath:indexPath)->CGFloat
设置tableView 1的行高,但是对于
tableView 2
我必须在
viewDidLoad()
中设置
self.tableView 2.rowHeight
,为什么

编辑

代码

class MainViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

    @IBOutlet weak var tableView1: UITableView! // tag = 1
    @IBOutlet weak var tableView2: UITableView! // tag = 2

    var getDataViewController: GetDataViewController!

    override func viewDidLoad() {
        self.tableView1.delegate = self
        self.tableView1.dataSource = self
        self.tableView2.delegate = self
        self.tableView2.dataSource = self

        self.tableView2.rowHeight = 44 // work for tableView2

        getDataViewController = storyboard!.instantiateViewController(withIdentifier: "getData") as! GetDataViewController
    }

    // ...


    // Table View DataSource
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        if tableView.tag == 1 {
            return tableView1DataArray.count
        }
        else if tableView.tag == 2 {
            return tableView2DataArray.count
        }
    }

    // Table View Delegate
    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        if tableView.tag == 1 {
            return 122 // work for tableView1
        }
        return 44 // not work for tableView2
    }
}
我在其他视图控制器中获取tableView2的数据:

class GetDataViewController: UIViewController {
    var mainViewController: MainViewController!        
    // ...
    @IBAction func ok(_ sender: UIButton) {
        let index = IndexPath(row: tableView2.count, section: 0)
        // ...
        let data = SomeData()
        tableView2DataArray.append(data)
        DispatchQueue.main.async {
            mainViewController.tableView2.inserRows(at: [index], with: .automatic)
        }
    }

}

rowHeight
属性和委托方法
tableView(:heightForRowAt:)
之间的区别在于,委托方法是为每个单元格调用的,并且通常包含基本计算(当您有很多行时,它可能会很昂贵)。 在您的情况下,由于行高是固定的,并且每个单元格的行高都相同,因此最好对
UITableView
实例使用
rowHeight
属性


每当重新加载tableView/节时(使用
reloadData()
或任何其他重新加载方法),都会调用委托方法,因此请确保在获得数据后调用它

如果代理未实现tableView(u1;:heightForRowAt:)方法,则可以设置单元格的行高。rowHeight的默认值为UITableViewAutomaticDimension

[……]

使用tableView(:heightForRowAt:)而不是rowHeight会影响性能。每次显示表视图时,它都会为代理的每一行调用tableView(:heightForRowAt:)


所以,如果我还没有数据,
tableView(\uu:heightForRowAt:)
是无用的吗?另外,当我获取数据并使用
reloadData()
tableView(u:heightForRowAt:)
仍不工作时,为什么?只要有单元格要显示,就会调用委托方法。您可能返回了一个
0
每个节的行数(检查该方法),并检查是否使用断点实际调用了该方法。我确信每个节的行数不是
0
,但如果我使用
tableView(U2;:heightForRowAt:)
您能插入代码更新您的第一篇文章吗@ioio007@ioio007您能用设置
行高
属性的部分和
行数部分
更新它吗?谢谢