「quicky」:如何獲取NSString的大小(寬度)?如何獲得NSString的大小
我想看看如果字符串寬度的字符串,看它是否大於屏幕給定的寬度,在這種情況下,我必須「裁剪」它並將其附加「...」獲得UILabel的通常行爲。由於AAAAAAAA和iiiiii具有相同的長度但不同的大小(例如),string.length不會成功。
我有點卡住了。
非常感謝。
「quicky」:如何獲取NSString的大小(寬度)?如何獲得NSString的大小
我想看看如果字符串寬度的字符串,看它是否大於屏幕給定的寬度,在這種情況下,我必須「裁剪」它並將其附加「...」獲得UILabel的通常行爲。由於AAAAAAAA和iiiiii具有相同的長度但不同的大小(例如),string.length不會成功。
我有點卡住了。
非常感謝。
這是一種不同的方法。找出文本的最小大小,以便它不會換行到多行。如果它包裝到一行以上,可以使用高度查找。
您可以使用此代碼:
CGSize maximumSize = CGSizeMake(300, 9999);
NSString *myString = @"This is a long string which wraps";
UIFont *myFont = [UIFont fontWithName:@"Helvetica" size:14];
CGSize myStringSize = [myString sizeWithFont:myFont
constrainedToSize:maximumSize
lineBreakMode:self.myLabel.lineBreakMode];
300屏幕與利潤率一點空間的寬度。如果你不使用IB,你應該用你自己的值替換字體和大小,如果是lineBreakMode
。
現在myStringSize
將包含一個height
,你可以檢查你知道只有一行高(使用相同的字體和大小)的高度。如果它更大,則需要剪切文本。請注意,您應該在再次檢查之前將...添加到字符串中(添加...可能會再次超過限制)。
將此代碼放入循環中以剪切文本,然後再次檢查正確的高度。
您需要使用Core Graphics來測量以指定字體和大小呈現的字符串。請參閱Measuring the pixel width of a string的答案進行演練。
neva的答案做到了。無論如何感謝 。 – camilo 2010-04-19 17:50:33
使用下面的方法。
目標C
- (CGSize)findHeightForText:(NSString *)text havingWidth:(CGFloat)widthValue andFont:(UIFont *)font {
CGSize size = CGSizeZero;
if (text) {
CGRect frame = [text boundingRectWithSize:CGSizeMake(widthValue, CGFLOAT_MAX) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{ NSFontAttributeName:font } context:nil];
size = CGSizeMake(frame.size.width, frame.size.height + 1);
}
return size;
}
夫特3.0
func findHeight(forText text: String, havingWidth widthValue: CGFloat, andFont font: UIFont) -> CGSize {
var size = CGSizeZero
if text {
var frame = text.boundingRect(withSize: CGSize(width: widthValue, height: CGFLOAT_MAX), options: .usesLineFragmentOrigin, attributes: [NSFontAttributeName: font], context: nil)
size = CGSize(width: frame.size.width, height: frame.size.height + 1)
}
return size
}
爲什麼身高+ 1? – 2016-09-27 08:42:08
'size = CGSize(width:ceilf(frame.width),height:ceilf(frame.height))'更好。 – 2016-09-27 08:51:59
問題是如何獲取字符串的寬度。這個答案是如何獲得字符串的高度,如果你已經知道它的寬度...好的信息,但不是問題的答案。我認爲做出這個答案的一個更好的方法是提出正確的問題,然後自己回答,隨後對這個問題提出一個可能的評論,指出你的相關問題。 – mah 2018-02-15 16:04:38
sizeWithFont:constrainedToSize:lineBreakMode
現在已不適用。使用下面的代碼片段,
UIFont *font=[UIFont fontWithName:@"Arial" size:16.f];
NSString *name = @"APPLE";
CGSize size = [name sizeWithAttributes:@{NSFontAttributeName:font}];
非常感謝! 你的回答是正確的,在再次檢查尺寸之前附加「...」的技巧是明智的。 – camilo 2010-04-19 17:12:52
對於iOS 7,你應該簽出[這個答案](http://stackoverflow.com/a/18951386/3965) – 2013-12-26 21:09:37
它已被棄用後ios7,你應該使用boundingRectWithSize:.. – 7heaven 2015-01-13 03:41:09