这完全适用于iOS8.1模拟器。原始代码:
func updateCell(path:Int){
let indexPath = NSIndexPath(forRow: path, inSection: 0)
tableView.beginUpdates()
tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Fade)
tableView.endUpdates()
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
var cell:PhotoCell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as PhotoCell
if data[indexPath.row].objectId == ""{
getData.getData(universityData.tableName, sender: self, cellId: indexPath.row)
}else{
var subviews = cell.subviews
for view in subviews{
view.removeFromSuperview()
}
}
tableView.separatorStyle = UITableViewCellSeparatorStyle.None
let screenSize: CGRect = UIScreen.mainScreen().bounds
let screenWidth = screenSize.width;
tableView.rowHeight = screenWidth + 38
//Other cell stuff here
return cell
}
但是在iOS7.1模拟器上, 1.所有单元格在顶部单元格顶部堆叠在一起,而不是在一秒钟内向下滑动 2.当细胞首次加载时,它们看起来正常 3.在第二个负载上调用" else"在代码中,单元格开始消失而不是重新加载
我找到了这样的答案并尝试以这种方式更改代码:
else{
for view in cell.contentView.subviews{
if view.isKindOfClass(UIView){
view.removeFromSuperview()
}
}
}
案例1和案例2仍在发生。但是细胞在两个图像之间切换,首先是正常的清洁细胞,第二个是旧数据的细胞仍在内部:
好的问题是,如何在iOS 7.1和iOS上同时加载单元格8.1
EDIT2:
Feed View Controller:
http://pastebin.com/aqyxpimi
自定义单元格:
http://pastebin.com/4eMgkBc1
答案 0 :(得分:2)
每次表视图使用以下代码请求单元格时,您都在更新tableview属性:
tableView.separatorStyle = UITableViewCellSeparatorStyle.None
let screenSize: CGRect = UIScreen.mainScreen().bounds
let screenWidth = screenSize.width;
tableView.rowHeight = screenWidth + 38
这是不必要的,可能会导致问题。在请求第一个单元格之前,行高度没有设置,我怀疑它是导致行高在iOS 7上无法正常工作。相反,您应该只在视图控制器中的viewDidLoad
上执行此操作。
此外,没有理由你应该像这样任意删除单元格的所有子视图。您不仅要从直接单元格中删除视图,还要在每次表视图重用时删除它。这意味着在重用单元格时将没有显示数据的视图(如果它被重用于具有数据的行)。相反,您应该填写空数据或默认数据。
修改强>
查看完整代码后,不应在数据源方法中向子单元添加子视图。每次重复使用单元格时,都会向其中添加其他视图,从而留下旧视图。我看到你试图删除旧视图,但是你不加区别地删除所有子视图,这是一个非常糟糕的主意。
相反,您应该将细胞添加到带有细胞类出口的笔尖,或者您应该在细胞类中以编程方式添加细胞。您可能应该在init(style: UITableViewCellStyle, reuseIdentifier: String?)
和awakeFromNib
中执行此操作,但如果您知道您的单元格总是来自笔尖,则可以选择一个。数据源方法应该只配置自定义视图,而不是创建,添加或删除它们。