【发布时间】:2016-09-11 01:29:36
【问题描述】:
我试图弄清楚为什么我的 tableView 只呈现在调用 viewDidAppear 方法时对用户可见的部分。
当我第一次启动应用程序时,第 1、2 和 3 部分正确呈现,如下所示。但是,第 4 节及以后的部分无法正确呈现。当我按下刷新按钮(手动调用 reload() 方法)时,单击刷新按钮期间的可见部分会刷新并正确呈现。
我已将我的 viewDidAppear 方法以及一个临时的“刷新”按钮链接到下面的 reload() 方法:
textViewArray = [m1DF,m2DF,m3DF,m4DF,m5DF,m6DF,m7DF,m8DF,m9DF,m10DF,m11DF,m12DF,m13DF,m14DF,m15DF,m16DF]
for (index, tv) in textViewArray!.enumerate() {
let fixedWidth = tv.frame.size.width
tv.sizeThatFits(CGSize(width: fixedWidth, height: CGFloat.max))
let newSize = tv.sizeThatFits(CGSize(width: fixedWidth, height: CGFloat.max))
var newFrame = tv.frame
newFrame.size = CGSize(width: max(newSize.width, fixedWidth), height: newSize.height)
tv.frame = newFrame;
heightArray[index] = newSize.height
}
for (index, _) in (heightArray.enumerate()) {
heightArray[index] = textViewArray![index].frame.height
}
self.tableView.reloadData()
当我第一次启动应用程序时,第 1、2 和 3 部分正确呈现,如下所示:
当我按下刷新按钮(手动调用 reload() 方法)时,单击刷新按钮期间的可见部分(在本例中为标题为“M05”和“M06”的部分)刷新并正确呈现:
编辑
不包括网点的完整代码:
导入 UIKit 导入广告支持 导入 iAd
class CalculatorTableViewController: UITableViewController {
var heightArray: [CGFloat] = [44.0,44.0,44.0,44.0,44.0,44.0,44.0,44.0,44.0,44.0,44.0,44.0,44.0,44.0,44.0,44.0]
var textViewArray = [UITextView]?()
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
reload()
}
func reload() {
textViewArray = [m1DF,m2DF,m3DF,m4DF,m5DF,m6DF,m7DF,m8DF,m9DF,m10DF,m11DF,m12DF,m13DF,m14DF,m15DF,m16DF]
print("*****1*****\n\n\n\n\n \(m1DF.bounds.height), \(m1DF.frame.height)")
for (index, tv) in textViewArray!.enumerate() {
let fixedWidth = tv.frame.size.width
tv.sizeThatFits(CGSize(width: fixedWidth, height: CGFloat.max))
let newSize = tv.sizeThatFits(CGSize(width: fixedWidth, height: CGFloat.max))
var newFrame = tv.frame
newFrame.size = CGSize(width: max(newSize.width, fixedWidth), height: newSize.height)
tv.frame = newFrame;
heightArray[index] = newSize.height
print("Row \(index) has height \(newSize.height)")
}
for (index, _) in (heightArray.enumerate()) {
heightArray[index] = textViewArray![index].frame.height
}
self.tableView.reloadData()
}
override func viewDidLoad() {
super.viewDidLoad()
}
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
}
override func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
//sizeCell(indexPath.section)
}
@IBAction func refreshButton(sender: AnyObject) {
reload()
}
override func tableView(tableView: UITableView, estimatedHeightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
return 300.0
}
override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
if indexPath.row == 0 {
return heightArray[indexPath.section]
} else {
return UITableViewAutomaticDimension
}
}
/*override func tableView(tableView: UITableView, estimatedHeightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
return 200.0
}*/
}
【问题讨论】:
-
@vikingsegundo 你这是什么意思?
-
如果您查看文档,您会发现表格视图旨在仅呈现可见单元格。为什么要对可能永远不会显示的单元格进行可能昂贵的渲染?您的问题来自未正确实现数据源和委托。
-
我的问题是,即使用户清楚地看到下面的单元格,它也不会渲染它们。他们只有在我使用刷新按钮强制他们渲染时才会渲染。
-
正如我所说:您的数据源和委托存在问题。猜猜看:只要您不显示代码,我们就帮不了您。
-
在上面添加了我的代码...
标签: swift uitableview swift2 autolayout