ios - 在 Swift 中根据 String 计算出 UILabel 的大小

标签 ios iphone string swift3 uilabel

我正在尝试根据不同的字符串长度计算 UILabel 的高度。

func calculateContentHeight() -> CGFloat{
    var maxLabelSize: CGSize = CGSizeMake(frame.size.width - 48, CGFloat(9999))
    var contentNSString = contentText as NSString
    var expectedLabelSize = contentNSString.boundingRectWithSize(maxLabelSize, options: NSStringDrawingOptions.UsesLineFragmentOrigin, attributes: [NSFontAttributeName: UIFont.systemFontOfSize(16.0)], context: nil)
    print("\(expectedLabelSize)")
    return expectedLabelSize.size.height

}

上面是我用来确定高度的当前函数,但它不起作用。我将不胜感激我能得到的任何帮助。我更喜欢 Swift 而不是 Objective C 的答案。

最佳答案

String 上使用扩展名

swift 3

extension String {
    func height(withConstrainedWidth width: CGFloat, font: UIFont) -> CGFloat {
        let constraintRect = CGSize(width: width, height: .greatestFiniteMagnitude)
        let boundingBox = self.boundingRect(with: constraintRect, options: .usesLineFragmentOrigin, attributes: [NSFontAttributeName: font], context: nil)
    
        return ceil(boundingBox.height)
    }

    func width(withConstrainedHeight height: CGFloat, font: UIFont) -> CGFloat {
        let constraintRect = CGSize(width: .greatestFiniteMagnitude, height: height)
        let boundingBox = self.boundingRect(with: constraintRect, options: .usesLineFragmentOrigin, attributes: [NSFontAttributeName: font], context: nil)

        return ceil(boundingBox.width)
    }
}

还有 NSAttributedString(有时非常有用)

extension NSAttributedString {
    func height(withConstrainedWidth width: CGFloat) -> CGFloat {
        let constraintRect = CGSize(width: width, height: .greatestFiniteMagnitude)
        let boundingBox = boundingRect(with: constraintRect, options: .usesLineFragmentOrigin, context: nil)
    
        return ceil(boundingBox.height)
    }

    func width(withConstrainedHeight height: CGFloat) -> CGFloat {
        let constraintRect = CGSize(width: .greatestFiniteMagnitude, height: height)
        let boundingBox = boundingRect(with: constraintRect, options: .usesLineFragmentOrigin, context: nil)
    
        return ceil(boundingBox.width)
    }
}

swift 4 和 5

只需更改 extension String 方法中的 attributes 的值

来自

[NSFontAttributeName: font]

[.font : font]

关于ios - 在 Swift 中根据 String 计算出 UILabel 的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30450434/

相关文章:

ios - 我怎么做?在代码中插入图像?

android - 选择 Android 键盘在移动网站上的作用方式

iphone - 核心数据-内存使用情况: my app crashes

c - 区分字符串和字节数组?

c++ - string_t from(wstring OR string) when string_t 也可以是两者的类型定义

java - 如何在 java 中用零填充字符串?

ios - 集合(Collection)——插入多个元素

ios - 仅更改 UITableView 中一个部分的页脚大小

objective-c - 如何将纬度经度转换为 CLLocationCoordinate2D

iPhone:模糊 UIImage