UITableView单元格高度变化在iPad和iPhone 6S上有不稳定的动画效果,但在iPhone 6上工作正常。我在UITableView单元格中有UIImageView(3/4比例),动态单元格高度(下面的代码)。我想在任何设备类型上适合全宽度的图像。
此时,我的代码适用于所有设备。问题出在iPad和iPhone 6 Plus上,高度变化动画并不顺畅。在iPhone 6上,它流畅。那么有谁能告诉我我做错了什么?或者我应该做些什么来使单元格高度变化动画在所有设备上正常工作?
我使用以下代码:
// Using PFQueryTableViewController
let screenSize: CGRect = UIScreen.mainScreen().bounds
var selectedCellIndexPath: NSIndexPath?
var SelectedCellHeight = CGFloat()
var UnselectedCellHeight = CGFloat()
....
override func viewDidLoad() {
super.viewDidLoad()
// This is how I am currently checking the tableView cell height on tap.
if screenSize.width > 700 {
SelectedCellHeight = 1000.0
UnselectedCellHeight = 778.0
} else {
SelectedCellHeight = 522.0
UnselectedCellHeight = 320.0
}
print(screenSize.width)
print(screenSize.height)
}
override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
if let selectedCellIndexPath = selectedCellIndexPath {
if selectedCellIndexPath == indexPath {
return SelectedCellHeight
}
}
return UnselectedCellHeight
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath, object: PFObject?) -> PFTableViewCell {
var cell = tableView.dequeueReusableCellWithIdentifier("cell") as! DataViewTableViewCell!
if cell == nil {
cell = DataViewTableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: "cell")
}
let sTap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: "sTap")
sTap.numberOfTapsRequired = 1
cell.addGestureRecognizer(sTap)
// Display main image
let initialThumbnail = UIImage(named: "DefaultImage")
cell.postPicture.image = initialThumbnail
if let thumbnail = object?["postOriginalPicture"] as? PFFile {
cell.postPicture.file = thumbnail
cell.postPicture.loadInBackground()
}
return cell
}
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
var cell = tableView.dequeueReusableCellWithIdentifier("cell") as! DataViewTableViewCell!
if cell == nil {
cell = DataViewTableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: "cell")
}
customNSIndexPath = indexPath
}
func sTap() { // Tap code to increases height of tableView cell
if let selectedCellIndexPath = selectedCellIndexPath {
if selectedCellIndexPath == indexPath {
self.selectedCellIndexPath = nil
} else {
self.selectedCellIndexPath = indexPath
}
} else {
selectedCellIndexPath = indexPath
}
tableView.beginUpdates()
tableView.endUpdates()
}
}
答案 0 :(得分:1)
您的代码中仍然存在一些奇怪的内容,我不确定它们是否解释了您描述的行为,但是在这里它们会出现:
allowsSelection
属性。 didSelectRowAtIndexPath
中没有任何用途beginUpdates
/ endUpdates
组合之间没有任何内容
什么都不做只有在您想申请时才需要它们
对表的多次更改,全部基于旧索引和
合并动画reloadRowsAtIndexPaths
告诉桌子细胞的大小已经改变了。
在didSelectRowAtIndexPath
中使用旧的和新的来做
选择indexPaths。有关详细信息,另请参阅Apple's guide。