我正在以编程方式创建一个UITableViewCell。无法在iOS 7中使用它.iOS8适用于UITableViewAutomaticDimension。在这个简化版本中,单元格有一个带有可变行数的标签。我正在尝试计算响应表格视图的高度。我尝试了很多次呼叫,但没有成功。这是代码
此例程使用标签和约束填充cell.contentView。我没有为这个细胞分类。这是在一个视图控制器中,它也管理表视图。
这是表视图控制器的完整源代码。单行和带有中断的行显示正常,但应该自动换行的长行显示为单行并最终离开视图的右边缘。
这是从AppDelegate以编程方式加载的,没有笔尖或故事板。
import UIKit
class ViewController: UITableViewController, UITableViewDataSource, UITableViewDelegate {
override func viewDidLoad() {
super.viewDidLoad()
self.tableView.delegate = self
self.tableView.dataSource = self
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 10
}
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
func createSRView(hView: UIView, index: Int) {
var testLabel = UILabel()
testLabel.numberOfLines = 0
testLabel.lineBreakMode = NSLineBreakMode.ByWordWrapping
switch index {
case 0:
testLabel.text = "This is a test of one line"
case 1:
testLabel.text = "This\nis\na test of\nmultiple lines"
case 2:
testLabel.text = "This is a test of a really long line that should definitely wrap to several lines in the simulator"
default:
testLabel.text = "nothing interesting"
}
testLabel.setTranslatesAutoresizingMaskIntoConstraints(false)
hView.addSubview(testLabel)
hView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|-[testLabel]-|", options: nil, metrics: nil, views: ["testLabel": testLabel]))
hView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|-[testLabel]-|", options: nil, metrics: nil, views: ["testLabel": testLabel]))
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
var cell: UITableViewCell?
cell = UITableViewCell()
createSRView(cell!, index: indexPath.row)
return cell!
}
override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
// var protoCell = tableView.dequeueReusableCellWithIdentifier("myCell") as! UITableViewCell
var protoCell = UITableViewCell()
createSRView(protoCell.contentView, index: indexPath.row)
protoCell.contentView.bounds = CGRectMake(0, 0, CGRectGetWidth(tableView.bounds), 1000.0)
protoCell.setNeedsUpdateConstraints()
protoCell.updateConstraintsIfNeeded()
protoCell.setNeedsLayout()
protoCell.layoutIfNeeded()
let height = protoCell.contentView.systemLayoutSizeFittingSize(UILayoutFittingCompressedSize).height
println("Height for row \(indexPath.row) = \(height)")
return height + 1.0
}
}