2016-03-08 68 views
2

我读过一些关于此的SO帖子,但找不到任何有效的东西。如何在Swift iOS8中正确获取字符串的宽度?

我的代码:

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!

+0

为什么不使用sizeToFit使其完美调整,然后设置其中心? – Eiko

+0

@Eiko听起来很有希望!我第一次听说这个。我只是一个星期快到dev ..谨慎分享一个例子? – Trip

+0

我在下面的Swift中给出了一个例子 - 也许你需要调整一两件事。也许标签是xib或storyboard文件的出口;但你应该看到这一点。 :) – Eiko

回答

4

你的代码可能是像这样简单:

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

这个片段确实令人惊叹。但是当添加这个时,根本没有文字出现。 – Trip

+0

啊我看到这是如何工作的。我认为我的文字在更新后才显示在其他地方。这确实是答案。非常感谢! – Trip

+0

只是一个小的跟进..但是当我做CGRectZero .. FitToSize()似乎不尊重其容器框架的宽度。因此,文字(多行),只是从右侧流血。但是如果我设置了CGRectMake,那么我可以明确地说'self.view.frame.size.width - 40'。有什么我错过了,这也是一个简单的方法来定义UILabel的框架边界?或者我应该只将宽度设置为附加属性? – Trip

0

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

喜欢的东西:

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

依靠属性的

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) 
+0

这实际上和我上面写的完全一样,除了你打印我的非工作宽度的结果。 – Trip

+0

确保您的englishString不为空,否则我不明白为什么它不起作用 – Ro22e0

2

下面的代码完全适用于me.Hope它将帮助你以及...

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