Я пытаюсь создать ячейку переменной высоты, используя автоматическую компоновку в UITableView. В ячейке таблицы есть две метки: ярлык заголовка и метка описания.Ячейка переменной высоты в UITableView работает только тогда, когда ячейка вне поля зрения
var viewBindingsDict: NSMutableDictionary = NSMutableDictionary()
viewBindingsDict.setValue(myTitleLabel, forKey: "label")
viewBindingsDict.setValue(myDescriptionLabel, forKey: "description")
let horizontalConstraints = NSLayoutConstraint.constraintsWithVisualFormat("H:|-10-[label]-10-|", options: nil, metrics: nil, views: viewBindingsDict as [NSObject : AnyObject]) as [AnyObject]
let horizontalConstraints2 = NSLayoutConstraint.constraintsWithVisualFormat("H:|-10-[description]-10-|", options: nil, metrics: nil, views: viewBindingsDict as [NSObject : AnyObject]) as [AnyObject]
let verticalConstraints = NSLayoutConstraint.constraintsWithVisualFormat("V:|-10-[label]-5-[description]-10-|", options: nil, metrics: nil, views: viewBindingsDict as [NSObject : AnyObject]) as [AnyObject]
self.contentView.addConstraints(horizontalConstraints + horizontalConstraints2 + verticalConstraints)
И в контроллере табличного,
self.tableView.estimatedRowHeight = 60
self.tableView.rowHeight = UITableViewAutomaticDimension
В источнике данных табличного представления,
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier) as! MyCell
// setup cell
cell.setNeedsUpdateConstraints()
cell.updateConstraintsIfNeeded()
return cell
}
Это работает для большинства клеток, но всегда есть одна или две клетки не должным образом установленные вне. Например, в этом test project первая строка неправильно организована, но когда я прокручиваю нижнюю часть (первая строка выходит из представления), затем прокручивается назад, она фиксируется сама. Я попытался использовать XIB и программно создать ячейку. Но не повезло.
Любая идея? Пожалуйста, см. test project, чтобы увидеть это странное поведение.
попробуйте не использовать 'self.tableView.estimatedRowHeight' – nathanwhy
Я пробовал свой код в github, и он работал, как ожидалось. Что такое версия Swift и версия iOS, на которой работает ваш симулятор? – ozgur
запустите приложение в симуляторе, а затем попробуйте опцию «Debug View Hierarchy», расположенную в нижней части Xcode. – Krishna