Objective c 如何在Swift iOS8中正确获取字符串的宽度?

Objective c 如何在Swift iOS8中正确获取字符串的宽度?,objective-c,iphone,swift,ios8,Objective C,Iphone,Swift,Ios8,我已经读了很多关于这个的帖子,但是找不到任何有效的 我的代码: let englishTextSize = englishString.sizeWithAttributes([NSFontAttributeName: UIFont.systemFontOfSize(14)]) let englishLabel = UILabel(frame: CGRectMake(self.view.center.x, 150, englishTextSize.width, englishTe

我已经读了很多关于这个的帖子,但是找不到任何有效的

我的代码:

let englishTextSize    = englishString.sizeWithAttributes([NSFontAttributeName: UIFont.systemFontOfSize(14)])
let englishLabel       = UILabel(frame: CGRectMake(self.view.center.x, 150, englishTextSize.width, englishTextSize.height))
这个代码片段在我的文本周围造成了一个省略号,从而避免了宽度不够大的问题

文本本身使用了许多模糊的字符,如:

svarūpe-'vasthānam

但我无法想象把它扔掉那么多。在Swift或Obj-C中向任何提示开放,但最好是Swift

无需自己计算宽度。您可以使用
sizeToFit
使宽度和高度适合文本,然后将框架更改为所需的高度和原点

比如:

[englishLabel sizeToFit];
[parentView addSubview:englishLabel];
englishLabel.center = [parentView convertPoint:parentView.center
                                  fromView:parentView.superview];

您的代码可以如此简单:

let englishLabel = UILabel(CGRectZero)
label.text = englishString
label.sizeToFit()
label.center = CGPointMake(self.view.center.x, 150)

属性的依赖性

let englishTextSize = englishString.sizeWithAttributes([NSFontAttributeName: UIFont.systemFontOfSize(14)])
let englishLabel = UILabel(frame: CGRectMake(self.view.center.x, 150, englishTextSize.width, englishTextSize.height))

print(englishLabel.text.sizeWithAttributes(orderAttributes).width)

下面的代码非常适合我。希望它也能帮助你

    let name = "Statue of liberty"
    let size = (name as NSString).size(attributes: [NSFontAttributeName: UIFont.systemFont(ofSize: 14)])

为什么不使用sizeToFit对其进行完美调整,然后设置其中心呢?@Eiko听起来很有希望!我第一次听说这个。我刚进入swift开发一周。。想和大家分享一个例子吗?我在下面的Swift中给出了一个例子——也许你需要调整一两件事。可能标签是xib或故事板文件的出口;但你应该明白这一点这个片段看起来确实很神奇。但是当添加这个时,根本没有文本出现。啊,我明白了。我想我的文字只是在你更新后显示在其他地方。这才是真正的答案。非常感谢!只是一个小的跟进。。但是当我做的时候。。FitToSize()似乎不考虑其容器框架的宽度。因此文本(多行)只是从右侧出血。但是如果我设置一个CGRectMake,那么我可以显式地说
self.view.frame.size.width-40
。我是否缺少了一种简单的定义UILabel框架边界的方法?或者我应该将宽度设置为一个附加属性吗?首先,尺寸测量值不匹配是不寻常的。。。你确定你用的是同一种字体吗?对于某些给定的边界有一些度量方法,但这取决于您的方法。也许你应该让autolayout来完成这项工作,但这超出了这个问题的范围。这与我在上面写的内容基本相同,只是你正在打印我的非工作宽度的结果。请确保你的英文字符串不是空的,否则我看不出它为什么不工作