gpt4 book ai didi

ios - 关于 heightForRowAt 和在 UITableView 中设置 rowHeight 的区别

转载 作者:行者123 更新时间:2023-11-28 12:28:51 33 4
gpt4 key购买 nike

我在同一个 View Controller 中有两个 tableview,tableview1tableview2,两个 tableview 中的单元格高度是固定的,我还设置了 delegatedataSource ,唯一的区别是当我进入 View Controller 时 tableview1 已经有数据,但是 tableview2 没有。

我的问题是我可以通过 func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat 设置 tableview1 的行高但是对于 tableview2 我必须设置viewDidLoad()中的self.tableview2.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
}
}

我在其他 View Controller 中获取 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 属性和委托(delegate)方法tableView(_:heightForRowAt:) 的区别在于委托(delegate)方法会为每个单元格调用并且通常包含基本计算(当你有很多行时它可能会很昂贵)。在您的情况下,由于行高是固定的并且每个单元格都相同,因此最好对两个 UITableView 实例都使用 rowHeight 属性。

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

You may set the row height for cells if the delegate doesn’t implement the tableView(_:heightForRowAt:) method. The default value of rowHeight is UITableViewAutomaticDimension

[...]

There are performance implications to using tableView(:heightForRowAt:) instead of rowHeight. Every time a table view is displayed, it calls tableView(:heightForRowAt:) on the delegate for each of its rows

Apple Documentation

关于ios - 关于 heightForRowAt 和在 UITableView 中设置 rowHeight 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42642178/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com