问题描述
如何根据给定的字体名称和字体大小找到字符串的宽度(CGFloat)?
(目标是将UIView的宽度设置为足以容纳字符串的宽度。)
我有两个字符串:一个重复“ 1”,重复36次,另一个重复“ M”,重复36次。两者都填满了屏幕的宽度(359.0)(给予或留出一些余量)。
我正在使用等距的Courier 16,因此我希望两个字符串的宽度相等(实际上它们确实会出现在屏幕上)。
但是,使用https://stackoverflow.com/a/58782429/8635708:
并使用https://stackoverflow.com/a/58795998/8635708:
- 每个字符串的宽度为249.640625。
- 至少在这里,它们是相同的,但该值显然不会填满屏幕。
解决方法
我认为您可以创建标签并致电label.sizeToFit()
:
let label = UILabel()
label.font = UIFont.init(name: "Courier",size: 16)
label.text = "mmmmmmmmmmmmmmmm"//"1111111111111111"
label.sizeToFit()
print("Width: \(label.frame.size.width)") //153.66666666666666 -> For both strings