cam*_*ilo 31 iphone xcode objective-c width nsstring
"快速":如何获得NSString的大小(宽度)?
我正在尝试查看字符串的字符串宽度是否大于给定的屏幕宽度,我必须"裁剪"它并将其附加到"...",获得通常的行为一个UILabel.string.length不会起作用,因为AAAAAAAA和iiiiii具有相同的长度但不同的大小(例如).
我有点卡住了.
非常感谢.
nev*_*ing 38
这是一种不同的方法.找出文本的最小大小,使其不会换行到多行.如果它包裹超过一行,你可以找到使用高度.
您可以使用此代码:
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];
Run Code Online (Sandbox Code Playgroud)
300是屏幕的宽度,边距有一点空间.你应该用你自己的值替换字体和大小,lineBreakMode如果你没有使用IB.
现在myStringSize将包含一个height你可以检查的高度,你知道只有1行高(使用相同的字体和大小).如果它更大,你需要剪切文本.请注意,您应该在再次检查之前向字符串添加...(添加...可能会再次超过限制).
将此代码放在循环中以剪切文本,然后再次检查正确的高度.
Him*_*dia 12
使用以下方法.
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;
}
Run Code Online (Sandbox Code Playgroud)
Swift 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
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
50879 次 |
| 最近记录: |