gpt4 book ai didi

iOS swift : Animating TableviewCell changes do not work correctly

转载 作者:行者123 更新时间:2023-11-30 12:20:05 25 4
gpt4 key购买 nike

更新 TableViews 单元格时,我有一个非常奇怪的行为。

最简单的描述方式是视频: https://drive.google.com/open?id=0B67InGf2FEPaODFLUEhLZ29LWTg

在这里你可以看到,当我第一次尝试展开(或折叠) View 时,它确实做了一些事情,但不是真的。我想要显示的 View 不存在,但它闪烁。

这是我的代码:

class StylingTableViewController: UITableViewController {

//MARK: properties
var articles = [Article]()

override func viewDidLoad() {
super.viewDidLoad()

articles.append(contentsOf: [Article(id: "Artikel 1"), Article(id: "Artikel 2")])

//Let table auto layout in height
tableView.rowHeight = UITableViewAutomaticDimension
tableView.estimatedRowHeight = 100

// Use the edit button item provided by the table view controller.
navigationItem.rightBarButtonItem = editButtonItem
}

// MARK: - Table view data source
override func numberOfSections(in tableView: UITableView) -> Int {
return 1
}

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return articles.count
}

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
// Table view cells are reused and should be dequeued using a cell identifier.
let cellIdentifier = "ArticleDetailCell"

guard let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath) as? StylingDetailTableViewCell else {
fatalError("The dequeued cell is not an instance of StylingDetailTableViewCell.")
}

let article = articles[indexPath.row]
cell.articleName.text = article.id

//Scrollview
let width:CGFloat = 90;
var xPos:CGFloat = 0;
var scrollViewContentSize:CGFloat=0;
for _ in 0...10{
let myView:CFPictureView = CFPictureView()
myView.frame.size.width = 80
myView.frame.size.height = 120
myView.frame.origin.x = CGFloat(xPos)
xPos += width
cell.pictures_scrollView.addSubview(myView)
scrollViewContentSize += width
cell.pictures_scrollView.contentSize = CGSize(width: scrollViewContentSize, height: 120)
}

return cell
}

// Override to support editing the table view.
override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
if editingStyle == .delete {
// Delete the row from the data source
articles.remove(at: indexPath.row)
tableView.deleteRows(at: [indexPath], with: .fade)
} else if editingStyle == .insert {
// Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view
}
}

//MARK: Actions
@IBAction func favButtonPressed(_ sender: UIButton) {
sender.isSelected = !sender.isSelected
}
@IBAction func expandCell(_ sender: UIButton) {

if let cell = sender.superview?.superview?.superview?.superview?.superview as? StylingDetailTableViewCell {
cell.fieldDescriptorStackView.isHidden = false;
cell.articleBarcode.isHidden = false;
cell.articleCustomerNumber.isHidden = false;
cell.articleStyle.isHidden = false;
cell.expandCellButton.isHidden = true;
cell.collapseCellButton.isHidden = false;
cell.pictures_order.isHidden = false;
cell.pictures_amount.isHidden = false;
cell.pictures_scrollView.isHidden = false;
cell.pictures_title.isHidden = false;

let indexPath = tableView.indexPath(for: cell)
self.tableView.reloadRows(at: [indexPath!], with: UITableViewRowAnimation.automatic)
(self.parent as? StylingViewController)?.topStackView.isHidden = true;
}

}
@IBAction func collapseCell(_ sender: UIButton) {

if let cell = sender.superview?.superview?.superview as? StylingDetailTableViewCell {
cell.fieldDescriptorStackView.isHidden = true;
cell.articleBarcode.isHidden = true;
cell.articleCustomerNumber.isHidden = true;
cell.articleStyle.isHidden = true;
cell.expandCellButton.isHidden = false;
cell.collapseCellButton.isHidden = true;
cell.pictures_order.isHidden = true;
cell.pictures_amount.isHidden = true;
cell.pictures_scrollView.isHidden = true;
cell.pictures_title.isHidden = true;

let indexPath = tableView.indexPath(for: cell)
self.tableView.reloadRows(at: [indexPath!], with: UITableViewRowAnimation.automatic)
(self.parent as? StylingViewController)?.topStackView.isHidden = false;
}
}
func undoAction() {
print("undo")

}

}

tableView.reloadRows 似乎有问题。如有帮助,我们将不胜感激

最佳答案

可能是问题,因为应用程序在第一次运行时仍然不知道单元格的估计高度。可以通过在 viewDidLoad 上添加此修复:

 tableView.estimatedRowHeight = 60
tableView.rowHeight = UITableViewAutomaticDimension

关于iOS swift : Animating TableviewCell changes do not work correctly,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44899419/

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