Подкласс UITableViewCell
содержит UIButton
с многострочным текстом, т. Е. Свойство numberOfLines = 0
.Как автоматически настроить высоту UITableViewCell, содержащую многострочный UIButton?
Размеры ячеек таблицы меняются по высоте, поэтому высота ячейки установлена равной UITableViewAutomaticDimension
.
Высота ячейки адаптируется при добавлении UILabel
с несколькими текстовыми строками. Однако он не адаптируется к UIButton
, ведь рамка кнопки не приспосабливается к кадру ее titleLabel
.
Что я могу сделать, чтобы ячейка просмотра таблицы и ее содержимое отображались на высоте кнопки?
class MyButtonCell: UITableViewCell {
var button: UIButton!
var buttonText: String?
convenience init(buttonText: String?) {
self.init()
self.buttonText = buttonText
button = UIButton(type: UIButtonType.System)
button.titleLabel?.numberOfLines = 0
button.titleLabel?.lineBreakMode = .ByWordWrapping
button.contentHorizontalAlignment = .Center
button.titleLabel?.textAlignment = .Center
button.translatesAutoresizingMaskIntoConstraints = false
contentView.addSubView(button)
NSLayoutConstraint.activateConstraints([
button.topAnchor.constraintEqualToAnchor(self.contentView.topAnchor),
button.bottomAnchor.constraintEqualToAnchor(self.contentView.bottomAnchor),
button.rightAnchor.constraintEqualToAnchor(self.contentView.rightAnchor),
button.leftAnchor.constraintEqualToAnchor(self.contentView.leftAnchor)
])
button.setTitle(buttonText, forState: .Normal)
button.setTitleColor(buttonTextColor, forState: UIControlState.Normal)
button.titleLabel?.font = buttonFont
}
}
Высота ячейки рассчитывается автоматически:
tableView.estimatedRowHeight = 100
func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
return UITableViewAutomaticDimension
}
UPDATE:
Пример проекта на https://github.com/mtrezza/ButtonCellHeightBug
Поданный компании Apple Bug Report # 26170971.
Вы используете раскадровку и автозапуск? – Siriss
@Siriss Я не использую раскадровку для этого представления таблицы, хотя я использую для этого автоматический макет кода (см. Строку 'NSLayoutConstraint') выше. – Manuel
Получил это. Попробуйте sizeToFit() на вашей кнопке после того, как вы установили текст. – Siriss