Я создал xib-представление, связанное с классом UIView с именем InstructionView. Это представление не содержит ничего, кроме UILabel, ограниченного полями со всех сторон.
Количество строк метки равно 0, а разрыв строки установлен на перенос слов.
Это представление затем добавляется в stackView. И этот stackView затем устанавливается как tableHeaderView tableView.
override func viewsToAddAfterTitle() -> [UIView] {
var views: [UIView] = []
if let view = Bundle.main.loadNibNamed(Constants.Nibs.instructionView, owner: self, options: nil)?.first as? InstructionView {
view.fillWithInstruction("A long text that needs more than 1 line")
views.append(view)
view.setNeedsLayout()
view.layoutIfNeeded()
}
return views
}
func addTableHeaderView() {
if let viewHeader: ViewHeader = Bundle.main.loadNibNamed(Constants.Nibs.viewHeader, owner: self, options: nil)?.first as? ViewHeader {
viewHeader.setTitle(titleText: headerTitle())
var arrangedStackSubviews: [UIView] = viewsToAddBeforeTitle()
arrangedStackSubviews.append(viewHeader)
arrangedStackSubviews.append(contentsOf: viewsToAddAfterTitle())
let stack = UIStackView(arrangedSubviews: arrangedStackSubviews)
stack.distribution = .fill
stack.axis = NSLayoutConstraint.Axis.vertical
stack.alignment = .fill
stack.autoresizingMask = [.flexibleWidth, .flexibleHeight]
tableView.tableHeaderView = stack
}
}
Функция fillWithInstruction вызывается при загрузке пера. Я звоню, чтобы установить текст метки.
func fillWithInstruction(_ instruction: String) {
instructionLabel.text = instruction
instructionLabel.sizeToFit()
}
Я попытался вычислить intrinsicContentSize и на основании этого установить ограничения на высоту метки. Я попытался разместить метку внутри представления и / или стека.
Ничего из того, что я пробовал, не сработало. Я хочу, чтобы метка показывала более 1 строки, если для этого текста требуется больше 1. Но в настоящее время она всегда показывает 1 строку.