swift - 如何在tableHeaderView中放置动态多行UILabel-LMLPHP我创建了一个链接到名为InstructionView的UIView类的xib视图。该视图只包含一个UILabel,它从各个方面都受到限制。

标签的行数为0,并且将换行符设置为自动换行。

然后将该视图添加到stackView中。然后将该stackView设置为tableView的tableHeaderView。

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()
}


我试过计算internalContentSize并基于此设置标签高度的约束。我尝试将标签放在视图和/或堆栈中。

我尝试过的所有方法均无济于事。我希望标签显示多于1行(如果该文本需要多于1行)。但是当前它始终显示1行。

最佳答案

创建一个UITableViewHeaderFooterView,并将其与viewForHeaderInSection委托一起使用。

看这个例子

Custom header view from xib for UITableView

关于swift - 如何在tableHeaderView中放置动态多行UILabel,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55743238/

10-09 12:51