行为与在Swift中的IOS中UILabel的实际行数计算不一致

问题描述 投票:0回答:1

我正在使用下面的UILabel扩展方法来计算UILabel中的实际行数。但是,我看到它总是返回比实际行数更多的值。而且,它返回的多余行数总是不一样的。因此,在使用该值之前,无法用固定的常数减去它。任何关于这里出问题的想法。我已经查看过堆栈溢出中发布的解决方案,但它们也无济于事。

extension UILabel {
    var maxNumberOfLines: Int {
        guard let text = text, let font = font else {
            return 0
        }
        let charSize = font.lineHeight
        let textSize = (text as NSString).boundingRect(
        with: CGSize(width: frame.width, height: .greatestFiniteMagnitude),
        options: .usesLineFragmentOrigin,
        attributes: [.font: font],
            context: nil)
        let linesRoundedUp = Int(ceil(textSize.height/charSize))
        return linesRoundedUp
    }

}
ios swift uilabel
1个回答
0
投票

由于我试图在索引路径委托方法的行中查找单元格中UILabel的行数,所以我得到了错误的结果,因为UILabel尚未布置在表格视图单元格中。我使用UIScreen.main.bounds-一些偏移量代替标签宽度来计算行数,从而解决了这个问题。

确切地说,我用过

extension UILabel {
    var maxNumberOfLines: Int {
        guard let text = text, let font = font else {
            return 0
        }
        let charSize = font.lineHeight
        let textSize = (text as NSString).boundingRect(
        with: CGSize(width: UIScreen.main.bounds.width - SOMEOFFSET, height: .greatestFiniteMagnitude),
        options: .usesLineFragmentOrigin,
        attributes: [.font: font],
            context: nil)
        let linesRoundedUp = Int(ceil(textSize.height/charSize))
        return linesRoundedUp
    }

}
© www.soinside.com 2019 - 2024. All rights reserved.