“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