我想计算字符串的大小,以调整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()
有什么问题。任何帮助表示赞赏。
答案 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;