这几天项目比较轻松,笔者就想写一些 简单的iOS 小知识,给初学者提供一些帮助。
根据文字的多少自适应大小,有很多的方法,笔者在这里只写两种笔者用过的两种吧。
第一种 ,根据UILable 来自适应 , 比较简单
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 320, MAXFLOAT);
//这里先创建一个lab 规定他的最大宽度为320 高度不定;
label.text = @"这是一个测试!!!adsfsaf时发生发勿忘我勿忘我勿忘我勿忘我勿忘我阿阿阿阿阿阿阿阿阿阿阿阿阿啊00000000阿什顿。。。";
//测试数据。
label.numberOfLines = 0; //如果是label的长度不超过1行的时候不应写。这句是自适应多好的用到。
label.font = [UIFont systemFontOfSize:12];
//设置table的字体
[label sizeToFit];
// 根据文字只适应。
NSLog(@"lab.heaght -------%f",label.frame.size.height);
第2种,根据内容来设计自定义大小
NSString *s = @"这是一个测试!!!adsfsaf时发生发勿忘我勿忘我勿忘我勿忘我勿忘我阿阿阿阿阿阿阿阿阿阿阿阿阿啊00000000阿什顿。。。";
CGSize size = CGSizeMake(320,MAXFLOAT);
//计算实际frame大小,并将label的frame变成实际大小
//CGSize labelsize = [s sizeWithFont:font constrainedToSize:size lineBreakMode:UILineBreakModeWordWrap];//(ios7之前的方法)font 字体大小 ,size 最大的尺寸 UILineBreakModeWordWrap 换行的类型。
CGSize labelsize = [s boundingRectWithSize:size options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName: [UIFont systemFontOfSize:12]} context:nil].size;//(iOS7 之后的方法)
lable.frame,size = labelsize;
// typedef enum {
// UILineBreakModeWordWrap = 0,
// UILineBreakModeCharacterWrap,
// UILineBreakModeClip,
// UILineBreakModeHeadTruncation,
// UILineBreakModeTailTruncation,
// UILineBreakModeMiddleTruncation,
// } UILineBreakMode;
// UILineBreakModeWordWrap = 0,
// 以单词为单位换行,以单位为单位截断。
// UILineBreakModeCharacterWrap,
// 以字符为单位换行,以字符为单位截断。
// UILineBreakModeClip,
// 以单词为单位换行。以字符为单位截断。
// UILineBreakModeHeadTruncation,
// 以单词为单位换行。如果是单行,则开始部分有省略号。如果是多行,则中间有省略号,省略号后面有4个字符。
// UILineBreakModeTailTruncation,
// 以单词为单位换行。无论是单行还是多行,都是末尾有省略号。
// UILineBreakModeMiddleTruncation,
// 以单词为单位换行。无论是单行还是多行,都是中间有省略号,省略号后面只有2个字符。