Swift:如何获得正确的String大小

时间:2015-11-26 10:03:56

标签: ios string swift

我想计算字符串的大小,以调整UILabel的大小。我用三种不同的方法来计算尺寸,确切地说,有两种方法。但我得到了三个不同的结果,完全混淆了 最令人困惑的是我创建了一个UILabel并使用sizeToFit()来获取大小。然后我使用大小创建一个真正的UILabel并显示它,但标签被截断。然后我再次使用sizeToFit()来调整真实的UILabel,并且尺寸更大。

我怀疑它是否是由尺度差异引起的。但在不同的模拟器/设备上仍有三个结果。

这是我的代码:

import UIKit
class ViewController: UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()
    let items = ["connected devices", "join session", "start host"]
    let font = UIFont.systemFontOfSize(16)
    var i = 0
    for item in items {
        let size = item.size(font: font)
        print("\(size)")

        let attriSize = item.sizeWithAttributes([NSFontAttributeName:font])
        print("attriSize\(attriSize)")

        let label = UILabel(frame: CGRect(origin: CGPoint(x: 50, y: 50 + i*50), size: size))
        label.text = item
        label.backgroundColor = UIColor.redColor()
        label.sizeToFit()
        print("\(label.bounds.size)")

        view.addSubview(label)
        ++i
        print("\n")
    }
}
}
extension String {
func size(font font: UIFont) -> CGSize {
    let label = UILabel(frame: CGRectZero)
    label.text = self
    label.font = font
    label.sizeToFit()
    let size = label.bounds.size

    return size
}

}

,结果是

(137.333333333333,19.3333333333333)
attriSize(137.0859375,19.09375)
(144.666666666667,20.3333333333333)

(84.3333333333333,19.3333333333333)
attriSize(84.265625,19.09375)
(89.0,20.3333333333333)

(70.0,19.3333333333333)
attriSize(69.765625,19.09375)
(73.6666666666667,20.3333333333333)

我真的想知道sizeToFit()有什么问题。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

嗨,这是一个可以帮助你的实例:

let fixedWidth = textView.frame.size.width
    textView.sizeThatFits(CGSize(width: fixedWidth, height: CGFloat.max))
    let newSize = textView.sizeThatFits(CGSize(width: fixedWidth, height: CGFloat.max))
    var newFrame = textView.frame
    newFrame.size = CGSize(width: max(newSize.width, fixedWidth), height: newSize.height)
    textView.frame = newFrame;