IOS Swift:动画化TableviewCell更改无法正常工作
问题描述:
更新TableViews单元格时,我有一个相当奇怪的行为。IOS Swift:动画化TableviewCell更改无法正常工作
来形容最简单的方法是视频: https://drive.google.com/open?id=0B67InGf2FEPaODFLUEhLZ29LWTg
在这里你可以看到,我第一次尝试展开(或折叠)来看,该SOR的做一些事情,但不是真的。我想表达的观点不存在,但它闪烁。
这里是我的代码:
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
感谢您的答复,但我已经有tableView.rowHeight = UITableViewAutomaticDimension和tableView.estimatedRowHeight = 100在我viewDidLoad中() – Tterhuelle
你能共享类文件? –
我添加了整个类文件 – Tterhuelle