年年有"余"

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1956|回复: 0

关于sizeWithFont要说几句

[复制链接]
  • TA的每日心情
    奋斗
    2022-12-13 21:26
  • 签到天数: 371 天

    [LV.9]以坛为家II

    发表于 2015-6-15 15:24:08 | 显示全部楼层 |阅读模式
    本帖最后由 Sian 于 2015-6-15 16:01 编辑

    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

    这样够简单了吧,懒人们!!
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    手机版|小黑屋|Archiver|iOS开发笔记 ( 湘ICP备14010846号 )

    GMT+8, 2024-5-3 07:12 , Processed in 0.043598 second(s), 18 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表