换行符不适用于tableFooterView中的UILabel

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了换行符不适用于tableFooterView中的UILabel相关的知识,希望对你有一定的参考价值。

我是带有footerViewtableView。它应该显示一个简单的标签。

在ViewController的viewDidLoad中,我像这样分配tableFooterView:

let footerView = MyFooterView(frame: CGRect(x: 0, y: 0, width: tableView.frame.width, height: 0))
tableView.tableFooterView = footerView

MyFooterView是带有单个标签的UIView。标签设置如下所示:

label.font = someFont
label.adjustsFontForContentSizeCategory = true
label.textColor = .black
label.numberOfLines = 0
label.text = "my super looooooong label that should break some lines but it doesn't."
label.textAlignment = .center
label.translatesAutoresizingMaskIntoConstraints = false
addSubview(label)
NSLayoutConstraint.activate([
    label.leadingAnchor.constraint(equalTo: self.leadingAnchor, constant: 40),
    label.trailingAnchor.constraint(equalTo: self.trailingAnchor, constant: -40),
    label.topAnchor.constraint(equalTo: self.topAnchor, constant: 20),
    label.bottomAnchor.constraint(equalTo: self.bottomAnchor, constant: -20)
])

为了使AutoLayout与MyFooterView一起使用,我在UIViewControllers viewDidLayoutSubviews中调用此方法:

func sizeFooterToFit() {
    if let footerView = self.tableFooterView {
        footerView.setNeedsLayout()
        footerView.layoutIfNeeded()

        let height = footerView.systemLayoutSizeFitting(UIView.layoutFittingCompressedSize).height
        var frame = footerView.frame
        frame.size.height = height
        footerView.frame = frame

        self.tableFooterView = footerView
    }
}

问题:标签中的行不中断。我得到以下结果:

tableFooterView

我该怎么办,以使标签具有多行?由于方法sizeFooterToFit,自动版式可以正常工作。唯一的是,标签的高度仅高至一行。

答案

[HERE是实现tableHeaderView的方法,根据情况,您只需要在UIViewController类中添加以下代码

override func viewWillLayoutSubviews() {
    super.viewWillLayoutSubviews()
    tbl.updateHeaderViewHeight()
}

和助手extension

extension UITableView {
    func updateHeaderViewHeight() {
        if let header = self.tableFooterView {
            let newSize = header.systemLayoutSizeFitting(CGSize(width: self.bounds.width, height: 0))
            header.frame.size.height = newSize.height
        }
    }
}

并删除

func sizeFooterToFit() {
    if let footerView = self.tableFooterView {
        footerView.setNeedsLayout()
        footerView.layoutIfNeeded()

        let height = footerView.systemLayoutSizeFitting(UIView.layoutFittingCompressedSize).height
        var frame = footerView.frame
        frame.size.height = height
        footerView.frame = frame

        self.tableFooterView = footerView
    }
}

以上代码。

结果将是:

enter image description here

以上是关于换行符不适用于tableFooterView中的UILabel的主要内容,如果未能解决你的问题,请参考以下文章

Drupal 寻呼机不适用于查询中的“LIKE”

换行换行符不适用于 UILabel 仅适用于特定文本字符串

在 maatwebsite 中换行不适用于 laravel

JavaScript regex(?!)不适用于包含文字 n r?的文本

pyspark读取csv文件multiLine选项不适用于具有换行符spark2.3和spark2.2的记录

ggtext:element_markdown 不适用于 position = "top"