2016-03-08 70 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)]) 
相關問題