下面是我的tableView控制器的代码,它从UIImage数组中获取图像,将其调整为宽高比并在屏幕上显示。虽然我滚动图像非常不稳定?无论如何都要减少波动?
import UIKit
class TableViewController: UITableViewController {
var images = imagePost.defaultimages //An array of a class containing images
var indexPathPass = IndexPath(row: 0, section: 0)
override func viewDidLoad() {
super.viewDidLoad()
tableView.rowHeight = UITableViewAutomaticDimension
tableView.estimatedRowHeight = 100
tableView.backgroundColor = colors.backgroundColor
DispatchQueue.main.async {
self.tableView.scrollToRow(at: self.indexPathPass, at: .top, animated: false)
}
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! TableViewCell
// Configure the cell...
cell.cellImageView.image = self.images[indexPath.row].image
cell.cellImageView.image = cell.cellImageView.image?.resizeImageWith()
cell.backgroundColor = UIColor(displayP3Red: 0, green: 20, blue: 1, alpha: 0.99)
cell.layer.shouldRasterize = true
return cell
}
override func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
return 100
}
}
答案 0 :(得分:0)
检查 estimatedRowHeight 与actualRowHeight之间的差异,差异越大,滚动时跳跃的次数就越多。
答案 1 :(得分:0)
解决方案1。
解决方案2。
您可以实现高度缓存机制。如下面的代码。
class TableViewController:UITableViewController {
var images = imagePost.defaultimages //An array of a class containing images
var indexPathPass = IndexPath(row: 0, section: 0)
fileprivate var cachedHeight = [IndexPath: CGFloat]()
override func viewDidLoad() {
super.viewDidLoad()
tableView.rowHeight = UITableViewAutomaticDimension
tableView.estimatedRowHeight = 100
tableView.backgroundColor = colors.backgroundColor
DispatchQueue.main.async {
self.tableView.scrollToRow(at: self.indexPathPass, at: .top, animated: false)
}
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! TableViewCell
// Configure the cell...
cell.cellImageView.image = self.images[indexPath.row].image
cell.cellImageView.image = cell.cellImageView.image?.resizeImageWith()
cell.backgroundColor = UIColor(displayP3Red: 0, green: 20, blue: 1, alpha: 0.99)
cell.layer.shouldRasterize = true
return cell
}
override func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
return cachedHeight[indexPath] ?? 100
}
override func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
cachedHeight[indexPath] = cell.frame.height
}
}