我按照本教程启用了动态单元格高度:http://www.appcoda.com/self-sizing-cells/
所以我添加了
tableView.estimatedRowHeight = 44.0
tableView.rowHeight = UITableViewAutomaticDimension
在viewDidLoad
中,将标签设置为0行,将字体设置为System。结果是单元格的大小现在是动态的,内容显示正确但不是在首次显示表格时。好吧,有些单元格正确显示,但其他单元格高度为44.当我滚动表格时,高度似乎得到纠正。在教程中,他们描述如下:
首次显示表格视图时,您可能会找到一些单元格 尺寸不合适。但是当你滚动表视图时,新的 单元格显示正确的行高。要解决此问题, 您可以在视图出现后强制重新加载
我试过
override func viewDidLoad() {
super.viewDidLoad()
self.tableView.estimatedRowHeight = 64
self.tableView.rowHeight = UITableViewAutomaticDimension
}
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
self.tableView.reloadData()
}
但它不起作用。任何想法如何解决这一问题?我在xcode 6.1和iOS8.1上,我正在使用swift。
我在github上创建了一个简单的测试项目:https://github.com/ArtworkAD/DynamicCellTest
答案 0 :(得分:2)
我下载了你在GitHub上创建的项目并进行了一些更改并使其正常工作。
ViewController中的代码如下所示......
import UIKit
class MyTableViewController: UITableViewController {
var entries:Array<String> = [String]()
override func viewDidLoad() {
super.viewDidLoad()
var i = 0
while i < 20 {
entries.append("\(i) Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor")
i++;
}
self.tableView.rowHeight = UITableViewAutomaticDimension
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.entries.count
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
//ask for a reusable cell from the tableview, the tableview will create a new one if it doesn't have any
let cell = self.tableView.dequeueReusableCellWithIdentifier("basic_cell", forIndexPath: indexPath) as UITableViewCell
var label = cell.viewWithTag(13)
if let unwrappedLabel = label as? UILabel {
unwrappedLabel.text = self.entries[indexPath.row]
}
return cell
}
}
故事板看起来像这样......
注意AutoLayout约束从单元格的顶部到底部,我将行数设置为0.
然后在运行应用程序时......
答案 1 :(得分:-2)
我认为可以在willDisplayCellMethod
块内的dispatch_once
中重新加载表格。这是一个客观的C语法。你可以快速锻炼。
-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
[self.tableView reloadData];
});
}