单行文本
sizeWithAttributes:
如果文本内容没有换行, 因为是单行文本, 长度就会无限长
如果文本内容为空, 宽度为0, 高度为相应字体大小的高度
CGSize contentSize = [textString sizeWithAttributes:@{NSFontAttributeName:[UIFont systemFontOfSize:14]}];
多行文本
boundingRectWithSize:options:context:
几个参数:
size:范围自己决定
options :这是一个枚举类型
typedefNS_ENUM(NSInteger, NSStringDrawingOptions) {
NSStringDrawingTruncatesLastVisibleLine = 1 << 5,
NSStringDrawingUsesLineFragmentOrigin = 1 <<0,
NSStringDrawingUsesFontLeading = 1 <<1,
NSStringDrawingUsesDeviceMetrics = 1 <<3,
} NS_ENUM_AVAILABLE_IOS(6_0);
自己选一个适合的
attributes:字典
NSDictionary *attributes = @{NSFontAttributeName:[UIFontsystemFontOfSize:20]};
context:文本绘制的规范定义,一般为nil就可以
示例:
//宽度固定200, 高度无限长
CGSize tempSize = CGSizeMake(200, MAXFLOAT);
NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
paragraphStyle.lineBreakMode = NSLineBreakByWordWrapping;
NSDictionary *attributes = @{NSFontAttributeName:font, NSParagraphStyleAttributeName:paragraphStyle.copy};
CGSize size = [string boundingRectWithSize:tempSize options:NSStringDrawingUsesLineFragmentOrigin attributes:attributes context:nil].size;
如果重写了 layoutSubviews 方法,则动画执行时也会触发这个方法,应当考虑在内
控件初始化时不能把高度设置为maxFloat, 否则控件的y一直为0
UILabel *titleLab = [[UILabel alloc] initWithFrame:CGRectMake(0, 120, SCREENWIDTH, MAXFLOAT)];