如何获取NSString的大小

10 浏览
0 Comments

如何获取NSString的大小

“快速问题”:我如何获取NSString的大小(宽度)?\n我想要查看字符串的宽度,以判断它是否大于屏幕给定的宽度,如果是的话,我需要对其进行“裁剪”并在末尾添加“...”,以实现UILabel的常规行为。string.length不适用,因为AAAAAAA和iiiiii的长度相同,但大小不同(例如)。\n我有点困惑。\n非常感谢。

0
0 Comments

在Objective-C中,如果想要获取NSString的大小,需要使用Core Graphics来测量字符串在指定字体和大小下的渲染宽度。在Stack Overflow上有一个问题Measuring the pixel width of a string,提供了解决方法。

解决方法如下:

1. 首先,需要导入Core Graphics框架:

#import 

2. 然后,使用下面的代码来获取字符串的大小:

NSString *string = @"Hello, World!";
UIFont *font = [UIFont systemFontOfSize:17.0]; // 指定字体和大小
CGSize size = [string sizeWithAttributes:@{NSFontAttributeName: font}];
CGFloat width = size.width;
CGFloat height = size.height;

通过以上代码,可以得到字符串的宽度和高度。

这是因为NSString类中没有直接提供获取字符串大小的方法,所以需要使用Core Graphics来进行测量。以上代码中,我们首先创建了一个字符串和一个UIFont对象,然后使用sizeWithAttributes方法来获取字符串在指定字体和大小下的大小。

希望这篇文章能帮助到你解决如何获取NSString的大小的问题。

0
0 Comments

如何获取NSString的大小

在使用Objective-C或Swift编程时,有时候需要获取NSString的大小。一个常见的问题是如何获取NSString的宽度和高度。下面是一种解决方法。

Objective-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;
}

Swift 3.0:

func findHeight(forText text: String, havingWidth widthValue: CGFloat, andFont font: UIFont) -> CGSize {

var size = CGSize.zero

if !text.isEmpty {

var frame = text.boundingRect(withSize: CGSize(width: widthValue, height: CGFloat.greatestFiniteMagnitude), options: .usesLineFragmentOrigin, attributes: [NSAttributedString.Key.font: font], context: nil)

size = CGSize(width: frame.size.width, height: frame.size.height + 1)

}

return size

}

上面的代码展示了如何使用boundingRectWithSize方法来计算NSString的大小。这个方法接受一个CGSize参数,用于限制字符串的宽度和高度。我们可以将宽度设置为所需的值,而将高度设置为一个很大的值(如CGFloat.greatestFiniteMagnitude),以便字符串可以根据其内容自动调整高度。

在Objective-C中,我们使用NSFontAttributeName来指定字体属性。而在Swift中,我们使用NSAttributedString.Key.font来指定字体属性。

这个方法返回一个CGSize对象,其中包含了字符串的宽度和高度。

为什么要加1?

在上述代码中,我们将字符串的高度加1。这是因为boundingRectWithSize方法返回的高度可能略微小于实际高度,加1可以确保字符串的高度不会被截断。

然而,其实有一种更好的方法来处理这个问题,就是使用ceilf()函数来取整。以下是一个更好的实现:

size = CGSize(width: ceilf(frame.width), height: ceilf(frame.height))

这样可以确保获取到的字符串大小是一个整数值,避免了可能的小数精度问题。

本文介绍了如何获取NSString的大小。我们使用boundingRectWithSize方法来计算字符串的宽度和高度。在Swift中,我们使用NSAttributedString.Key.font来指定字体属性。为了避免可能的高度截断问题,我们可以将字符串的高度加1或使用ceilf()函数来取整。这些方法能够帮助我们在编程中准确获取字符串的大小。

0
0 Comments

问题的出现原因:有用户提出了一个问题,即如何获取一个NSString的大小。用户可能遇到了这个问题,因为他想要在界面上显示一个字符串,并且希望根据字符串的大小来确定显示的布局。

解决方法:为了解决这个问题,用户可以使用以下代码来获取字符串的大小:

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];

在代码中,用户设置了一个最大的大小,然后使用`sizeWithFont:constrainedToSize:lineBreakMode:`方法来获取字符串的大小。然后,用户可以将获取到的高度与已知只有一行高的元素的高度进行比较。如果获取到的高度更大,用户需要对文本进行裁剪。用户可以在再次进行比较之前在字符串中添加省略号(...)。

用户可以将这段代码放在一个循环中来不断裁剪文本,并再次检查正确的高度。

这个解决方法可以解决用户的问题,并且还提供了一些额外的技巧,如在比较大小之前添加省略号。

需要注意的是,如果用户使用的是iOS 7,可以参考提供的链接获取更多关于解决这个问题的方法。

然而,有其他用户表示上述方法并不起作用,`NSString.StringSize`方法无论使用什么参数都只返回单行的高度。这个问题可能是方法本身的缺陷所致。用户希望有人能解释为什么会出现这种情况,或者提供更好的解决方法。

本文介绍了一个关于如何获取NSString大小的问题,并提供了一种解决方法。解决方法使用了一个特定的代码段来获取字符串的大小,并提供了一些额外的技巧。同时,本文还提到了一个关于iOS 7的解决方法。最后,本文提到了另一位用户对解决方法的反馈,并希望能有人提供更好的解决方案。

0