回答
這是一個相對簡單的方法。只需創建具有適當的字體的NSAttributedString,並要求其大小:
- (CGFloat)widthOfString:(NSString *)string withFont:(NSFont *)font {
NSDictionary *attributes = [NSDictionary dictionaryWithObjectsAndKeys:font, NSFontAttributeName, nil];
return [[[NSAttributedString alloc] initWithString:string attributes:attributes] size].width;
}
這泄漏了屬性字符串。 – 2010-08-07 08:28:55
確實 - 我假定垃圾收集環境。 – 2010-08-07 08:35:02
只需在字符串上使用'sizeWithAttributes:'代替:'return [string sizeWithAttributes:attributes] .width;' – jowie 2014-06-26 15:56:44
對不起,我的問題不夠詳細,不完全是我想要做的。我正在使用文本存儲,佈局管理器和文本容器。解決方案是使用佈局管理器來確定綁定矩形的矩形。這是代碼。
NSTextStorage *textStorage = [[NSTextStorage alloc] initWithString:@"hello"];
NSLayoutManager *layoutManager = [[NSLayoutManager alloc] init];
NSTextContainer *textContainer = [[NSTextContainer alloc] init];
[layoutManager addTextContainer:textContainer];
[textContainer release];
[textStorage addLayoutManager:layoutManager];
[layoutManager release];
//Figure out the bounding rectangle
NSRect stringRect = [layoutManager boundingRectForGlyphRange:NSMakeRange(0, [layoutManager numberOfGlyphs]) inTextContainer:textContainer];
這是一條漫長的道路。如果您通常擁有文本存儲,佈局管理器和文本容器(並且有文本視圖),那麼這很好,但是有幾個更簡短的方法。 – 2010-08-07 08:30:18
不會分配給'NSTextField'所需的字符串,然後調用'sizeToFit'方法 - >然後從'NSTextField'獲取寬度會更好嗎? (我有同樣的問題只是想正確地做到這一點) – ColdSteel 2015-10-06 10:53:34
發送字符串sizeWithAttributes:
消息,傳遞了含有與要測量的字符串屬性的字典。
UIKit中有一個很好的補充的NSString,使得sizeWithAttributes:有點輕:
CGSize titleSize = [title sizeWithFont:titleFont
constrainedToSize:contentCellSize
lineBreakMode:UILineBreakModeWordWrap];
'sizeWithFont'已棄用。 – 2016-11-15 09:03:07
這裏的斯蒂芬在Clozure Common Lisp中,解決方案使用Objective C的橋樑時。我在尋找解決方案時遇到了這篇文章,並且我剛剛重寫了Stephen的版本,該版本對我來說工作得很好。使用Clozure其他人可能會有所幫助:
(defun string-width (str font)
(let* ((dict (#/dictionaryWithObjectsAndKeys: ns:ns-mutable-dictionary
font #$NSFontAttributeName
ccl:+null-ptr+))
(attr (#/initWithString:attributes: (#/alloc ns:ns-attributed-string)
(ccl::%make-nsstring str)
dict))
(size (#/size attr)))
(ns:ns-size-width size)))
UIFont * font = [UIFont systemFontOfSize:15];
CGSize stringSize = [aString sizeWithFont:font];
CGFloat width = stringSize.width;
sizeWithFont現已被棄用。它現在應該看起來像CGSize stringSize = [aString sizeWithAttributes:@ {NSFontAttributeName:font}]; – RasTheDestroyer 2014-09-18 00:26:07
我不知道,如果你想在可可觸摸使用此。如果是,那麼:
- (CGFloat)widthOfString:(NSString *)string withFont:(NSFont *)font {
NSDictionary *attributes = [NSDictionary dictionaryWithObjectsAndKeys:font, NSFontAttributeName, nil];
return [[[NSAttributedString alloc] initWithString:string attributes:attributes] size].width;
}
不行。
在可可觸摸,你必須添加coretext框架,並導入頭 和寫你這樣的代碼:
UIFont *font = [UIFont fontWithName:@"HelveticaNeue-BoldItalic" size:DEFAULT_FONT_SIZE];
// NSLog(@"%@", NSFontAttributeName);
NSDictionary *attributes = [NSDictionary dictionaryWithObjectsAndKeys:font, (NSString *)kCTFontAttributeName, nil];
但是,GEE !!!!!
NSMutableAttributedString *as = [[NSMutableAttributedString alloc] initWithString:self.caption attributes:attributes];
[as size].width;
在NSMutableAttributedString中沒有這個方法的大小!
最後,這將工作
[self.caption sizeWithFont:font].width
這是很長時間以來最令人困惑的答案。你能發佈一個完整的片段嗎? – chrisallick 2015-07-29 21:52:00
以防萬一你想知道如何檢查標籤尺寸,(如果存在甚至不知道),你應該使用UIFont,而不是NSFont
UIFont適用於iOS,NSFont適用於Mac OS X. – 2015-04-05 06:27:55
作爲iOS 7及以上,這是正確的做法:
NSString * buttonTitle = @"demo title";
CGSize stringSize = [buttonTitle sizeWithAttributes:@{NSFontAttributeName: [UIFont systemFontOfSize:17.0f]}];
使用UILabel的屬性串:
- (CGSize)getStringSizeWithText:(NSString *)string font:(UIFont *)font{
UILabel *label = [[UILabel alloc] init];
label.text = string;
label.font = font;
return label.attributedText.size;
}
- 1. 如何獲得NSString的「真實長度」
- 2. 如何獲得leftBarButtonItem寬度?
- 3. IOS - 獲得高度的NSString
- 4. 如何獲得的NSString
- 5. 如何獲得空白的寬度?
- 6. 如何獲得字符串的寬度
- 7. 如何獲得課堂的CSS寬度?
- 8. 如何獲得g元素的寬度?
- 9. 如何獲得GLuint紋理的寬度?
- 10. 如何獲得TextView的寬度?
- 11. PHP cURL如何獲得圖像寬度?
- 12. 如何獲得道路寬度
- 13. 我如何從標籤獲得寬度?
- 14. 如何獲得父DIV寬度並設置子DIV寬度
- 15. 如何獲得最大寬度來控制最小寬度?
- 16. setRotationX/setRotationY寬度/高度增加後。如何獲得新的寬度和高度?
- 17. jQuery的獲得TD寬度
- 18. 如何獲得總是2位數字的nsstring中的nsstring的長度?
- 19. 如何根據容器的寬度獲得圖像的高度?
- 20. 如何獲得呈現的DIV的寬度和高度?
- 21. 如何獲得我的佈局的高度和寬度
- 22. 獲得絕對的高度和寬度
- 23. 將NSString截斷爲寬度
- 24. 如何獲得PHP中SVG圖片的寬度和高度?
- 25. libgdx如何獲得世界單位的高度和寬度
- 26. JavaScript:如何獲得窗口的寬度和高度?
- 27. 如何在運行時獲得佈局的高度和寬度?
- 28. AS3如何獲得外部圖像的寬度和高度
- 29. Cordova:如何獲得應用程序的寬度和高度?
- 30. 如何獲得真正的屏幕高度和寬度?
可能重複的[如何獲得NSString的大小](http://stackoverflow.com/questions/2669063/how-to-get-the-size-of-a-nsstring) – Jaanus 2010-08-07 08:07:54
不,因爲那問題是關於可可觸摸,而這一個是關於可可。 – 2010-08-07 08:28:08
@彼得霍西優秀的觀察。 – Jaanus 2010-08-08 07:59:39