原文:http://blog.youkuaiyun.com/itpeng523/article/details/23700385
一、先用xcode创建一个单视图工程
主界面为
为NSString写个求size的分类
#import "NSString+Size.h"
@implementation NSString (Size)
- (CGSize)textSizeWithFont:(UIFont *)font constrainedToSize:(CGSize)size lineBreakMode:(NSLineBreakMode)lineBreakMode
{
CGSize textSize;
if (CGSizeEqualToSize(size, CGSizeZero))
{
// NSDictionary *attributes = @{NSFontAttributeName:font}
NSDictionary *attributes = [NSDictionarydictionaryWithObject:font forKey:NSFontAttributeName];
// textSize = [self sizeWithAttributes:attributes];
// textSize = []
textSize = [self sizeWithAttributes:attributes];
}
else
{
NSStringDrawingOptions option =NSStringDrawingTruncatesLastVisibleLine |NSStringDrawingUsesLineFragmentOrigin |NSStringDrawingUsesFontLeading;
//NSStringDrawingTruncatesLastVisibleLine如果文本内容超出指定的矩形限制,文本将被截去并在最后一个字符后加上省略号。 如果指定了NSStringDrawingUsesLineFragmentOrigin选项,则该选项被忽略NSStringDrawingUsesFontLeading计算行高时使用行间距。(译者注:字体大小+行间距=行高)
NSDictionary *attributes = [NSDictionarydictionaryWithObject:font forKey:NSFontAttributeName];
CGRect rect = [self boundingRectWithSize:size
options:option
attributes:attributes
context:nil];
textSize = rect.size;
}
return textSize;
}
@end
主代码实现:
ViewController.h
#import <UIKit/UIKit.h>
#import "NSString+Size.h"
@interface ViewController : UIViewController
@property (weak, nonatomic) IBOutlet UITextField *mTextField;
@property (weak, nonatomic) IBOutlet UILabel *outTextField;
- (IBAction)switchKeboardInput:(id)sender;
+(CGSize)sizeOfContent:(NSString *)name;
@end
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
[[NSNotificationCenter defaultCenter]addObserver:selfselector:@selector(changeKeyBoard:)name:UIKeyboardWillChangeFrameNotification object:nil]; //键盘改变事件
}
- (void)viewWillDisappear:(BOOL)animated
{
}
-(void)changeKeyBoard:(NSNotification *)aNotifacation
{
//求字符串的长度
CGSize textSize = [ViewController sizeOfContent:_mTextField.text];
NSString *str = [NSString stringWithFormat:@"宽度为%.2f,高度为%.2f",textSize.width,textSize.height];
_outTextField.text = str;
}
+ (CGSize)sizeOfContent:(NSString *)name
{
if (name.length == 0) {
return CGSizeMake(0, 0);
}
NSMutableString *string = [NSMutableStringstringWithString:name];
return [string textSizeWithFont:[UIFont systemFontOfSize:15]constrainedToSize:CGSizeMake(100, 1000)lineBreakMode:NSLineBreakByWordWrapping]; //一行宽度最大为 100 高度1000
}
- (IBAction)switchKeboardInput:(id)sender
{
[_mTextField resignFirstResponder];
}
@end