- (NSRect)boundingRectWithSize:(NSSize)size options:(NSStringDrawingOptions)options attributes:(nullable NSDictionary<NSAttributedStringKey, id> *)attributes context:(nullable NSStringDrawingContext *)context API_AVAILABLE(macos(10.11), ios(7.0), watchos(2.0), tvos(9.0));
均通过此方法进行尺寸计算!
封装成一个类别:“NSObject+CalculateTextSize
”!
iOS端
使用UILabel时,设置当前的高度不能显示完文字!
CGFloat w = 200;
CGFloat h = 50;
UILabel * lb = [[UILabel alloc] initWithFrame:CGRectMake(20, 100, w, h)];
[self.view addSubview:lb];
lb.backgroundColor = [UIColor cyanColor];
lb.numberOfLines = 0;
lb.lineBreakMode = NSLineBreakByCharWrapping;
lb.text = @"阿达的减肥了克里斯qwertyyuiopasdfghjklzxcvbnm,.;/'[]\1234455678890";//显示不完的字符串
效果:当前的高度不能显示完文字!
书写一个类别“NSObject+CalculateTextSize”:
“.h”文件:
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h> //添加UIKit头文件,支持NSFontAttributeName、NSStringDrawingUsesLineFragmentOrigin/NSStringDrawingUsesFontLeading等属性
NS_ASSUME_NONNULL_BEGIN
@interface NSObject (CalculateTextSize)
/**
计算 文字实际所占的尺寸
@param strContent 字符串内容
@param w 最大宽度
@param font 字体
@return 文字实际所占的尺寸
*/
- (CGSize)sizeForLblContent:(NSString *)strContent fixMaxWidth:(CGFloat)w andFont:(UIFont *)font;
/**
计算 文字实际所占的尺寸
@param strContent 字符串内容
@param w 最大宽度
@param fontSize 字体大小(数字)
@return 文字实际所占的尺寸
*/
- (CGSize)sizeForLblContent:(NSString *)strContent fixMaxWidth:(CGFloat)w andFondSize:(int)fontSize;
@end
NS_ASSUME_NONNULL_END
“.m”文件:
#import "NSObject+CalculateTextSize.h"
@implementation NSObject (CalculateTextSize)
/**
计算 文字实际所占的尺寸
@param strContent 字符串内容
@param w 最大宽度
@param font 字体
@return 文字实际所占的尺寸
*/
- (CGSize)sizeForLblContent:(NSString *)strContent fixMaxWidth:(CGFloat)w andFont:(UIFont *)font {
// 把该属性放到字典中
NSDictionary *dictAttr = [[NSDictionary alloc] initWithObjectsAndKeys:font,NSFontAttributeName, nil];
// 通过字符串的计算文字所占尺寸方法获取尺寸
CGSize size = [strContent boundingRectWithSize:CGSizeMake(w, 0) //文本的Label的尺寸
options: NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading //文本绘制时的附加选项
attributes:dictAttr //文字的属性
context:nil].size;
return size;
}
/**
计算 文字实际所占的尺寸
@param strContent 字符串内容
@param w 最大宽度
@param fontSize 字体大小(数字)
@return 文字实际所占的尺寸
*/
- (CGSize)sizeForLblContent:(NSString *)strContent fixMaxWidth:(CGFloat)w andFondSize:(int)fontSize{
// 先获取文字的属性,特别是影响文字所占尺寸相关的
UIFont *font = [UIFont systemFontOfSize:fontSize];
// 把该属性放到字典中
NSDictionary *dictAttr = [[NSDictionary alloc] initWithObjectsAndKeys:font,NSFontAttributeName, nil];
// 通过字符串的计算文字所占尺寸方法获取尺寸
CGSize size = [strContent boundingRectWithSize:CGSizeMake(w, 0) //文本的Label的尺寸
options: NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading //文本绘制时的附加选项
attributes:dictAttr //文字的属性
context:nil].size;
return size;
}
@end
CGFloat maxWidth = CGRectGetWidth(lb.frame) - 5;//用于计算的最大宽度 要稍小一点!
CGSize size = [self sizeForLblContent:lb.text fixMaxWidth:maxWidth andFont:lb.font];//计算到相应尺寸!
if (size.height > CGRectGetHeight(lb.frame)) {//高度超过范围
CGRect newFrame = lb.frame;
newFrame.size.height = size.height;//设置为新的height
lb.frame = newFrame;
}
效果:重新设置的高度可以显示完文字!
Mac OS端
使用NSTextField时,设置当前的高度不能显示完文字!
NSTextField * showLabel = [[NSTextField alloc] initWithFrame:NSMakeRect(100.0, 100.0, 200.0, 20.0)];//文字提示Label
[self.view addSubview:showLabel];
showLabel.bordered = NO;
showLabel.editable = NO; showLabel.enabled = NO;//不可操作,当作Label!
showLabel.lineBreakMode = NSLineBreakByCharWrapping;//换行模式:字符边界
showLabel.alignment = NSTextAlignmentCenter; //字体 居中
showLabel.backgroundColor = [NSColor redColor];
showLabel.textColor = [NSColor blackColor]; //textColor(字体色)
showLabel.stringValue = @"qwertyuiopasdfghjklzxcvbnm,./;'[]1234567890-=!@#$^&(*)QWWRRA";
效果:当前的高度不能显示完文字!
书写一个类别“NSObject+CalculateTextSize”:
“.h”文件:
#import <Foundation/Foundation.h>
#import <Cocoa/Cocoa.h> //添加Cocoa头文件,支持NSFontAttributeName、NSStringDrawingUsesLineFragmentOrigin/NSStringDrawingUsesFontLeading等属性
NS_ASSUME_NONNULL_BEGIN
@interface NSObject (CalculateTextSize)
/**
计算 文字实际所占的尺寸
@param strContent 字符串内容
@param w 最大宽度
@param font 字体
@return 文字实际所占的尺寸
*/
- (NSSize)sizeForLblContent:(NSString *)strContent fixMaxWidth:(CGFloat)w andFont:(NSFont *)font;
/**
计算 文字实际所占的尺寸
@param strContent 字符串内容
@param w 最大宽度
@param fontSize 字体大小(数字)
@return 文字实际所占的尺寸
*/
- (NSSize)sizeForLblContent:(NSString *)strContent fixMaxWidth:(CGFloat)w andFondSize:(int)fontSize;
@end
NS_ASSUME_NONNULL_END
“.m”文件:
#import "NSObject+CalculateTextSize.h"
@implementation NSObject (CalculateTextSize)
/**
计算 文字实际所占的尺寸
@param strContent 字符串内容
@param w 最大宽度
@param font 字体
@return 文字实际所占的尺寸
*/
- (NSSize)sizeForLblContent:(NSString *)strContent fixMaxWidth:(CGFloat)w andFont:(NSFont *)font {
// 把该属性放到字典中
NSDictionary *dictAttr = [[NSDictionary alloc] initWithObjectsAndKeys:font,NSFontAttributeName, nil];
// 通过字符串的计算文字所占尺寸方法获取尺寸
NSSize size = [strContent boundingRectWithSize:NSMakeSize(w, 0) //文本的Label的尺寸
options: NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading //文本绘制时的附加选项
attributes:dictAttr //文字的属性
context:nil].size;
return size;
}
/**
计算 文字实际所占的尺寸
@param strContent 字符串内容
@param w 最大宽度
@param fontSize 字体大小(数字)
@return 文字实际所占的尺寸
*/
- (CGSize)sizeForLblContent:(NSString *)strContent fixMaxWidth:(CGFloat)w andFondSize:(int)fontSize{
// 先获取文字的属性,特别是影响文字所占尺寸相关的
NSFont *font = [NSFont systemFontOfSize:fontSize];
// 把该属性放到字典中
NSDictionary *dictAttr = [[NSDictionary alloc] initWithObjectsAndKeys:font,NSFontAttributeName, nil];
// 通过字符串的计算文字所占尺寸方法获取尺寸
NSSize size = [strContent boundingRectWithSize:NSMakeSize(w, 0) //文本的Label的尺寸
options: NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading //文本绘制时的附加选项
attributes:dictAttr //文字的属性
context:nil].size;
return size;
}
@end
CGFloat maxWidth = showLabel.frame.size.width - 5;//用于计算的最大宽度 要稍小一点!
NSSize size = [self sizeForLblContent:showLabel.stringValue fixMaxWidth:maxWidth andFont:showLabel.font];//计算到相应尺寸!
if (size.height > showLabel.frame.size.height) {//高度超过范围
NSRect newFrame = showLabel.frame;
newFrame.size.height = size.height;//设置为新的height
showLabel.frame = newFrame;
}
效果:重新设置的高度可以显示完文字!