1、在iOS7之前,动态布局场景中,由于初始化UILable的大小与实际需要显示的文字内容有时候会冲突,简单一点讲UILable初始时设小了,文字过多显示不完,或者初始设置太大了,文字较少,显示效果过于空荡。
2、如何解决这个问题呢,一般需要用到NSString的两个相关方法:
– (CGSize)sizeWithFont:(UIFont *)font
– (CGSize)sizeWithFont:(UIFont *)font constrainedToSize:(CGSize)size
3、这两个方法相信很多人都不陌生,但在iOS7之后此类方法都已过期,官方不推荐使用,取而代之的对应两个方法为:
– (CGSize)sizeWithAttributes:(NSDictionary *)attrs
– (CGRect)boundingRectWithSize:(CGSize)size options:(NSStringDrawingOptions)options attributes:(NSDictionary *)attributes context:(NSStringDrawingContext *)context
4、这两个方法看起来就很复杂,往往我们习惯了以前的方式,就不愿意去换,然而xCode又总是报警告,很多强迫症患者肯定又无法接受,所以大家都烦,我只能说,呵呵….
5、好了不多扯淡,接下来对这两个方法做个解释,相信你就不会抗拒了:
– (CGSize)sizeWithAttributes:(NSDictionary *)attrs
这个方法其实只是比原方法功能更强大了,原方法只传字号,这里可以传各种参数通过一个字典写入,我不讲复杂了,只说一点:传个什么参数可以实现原方法同样的效果!
@{NSFontAttributeName:[UIFont systemFontOfSize:10]}? ?? ? 相当于原来的? ?? ? [UIFont systemFontOfSize:10]
sizeWithFont:[UIFont systemFontOfSize:10] ??等同于? ?sizeWithAttribute:@{NSFontAttributeName:[UIFont systemFontOfSize:10]}
– (CGRect)boundingRectWithSize:(CGSize)size options:(NSStringDrawingOptions)options attributes:(NSDictionary *)attributes context:(NSStringDrawingContext *)context
这里同样做个说明:
size 等同于 原来的size
options是个枚举值,一个个去试,换行用 NSStringDrawingUsesLineFragmentOrigin
attributes同样是将字体换成字典,同上类似:@{NSFontAttributeName:[UIFont systemFontOfSize:10]
context直接写nil
这样够简单了吧,懒人们!!