美文网首页
OC_NSAttributedString工具 & 计算size

OC_NSAttributedString工具 & 计算size

作者: LiYaoPeng | 来源:发表于2018-11-13 17:43 被阅读0次

    demo地址

    解决的问题

    1. 有时候不得不计算文本size,来设置View的size,但是很多时候计算都不准确
    2. 文本计算代码啰嗦,难懂。
    3. 获取某行的frame。
    4. 根据宽度,缩放字体。即: 根据最大宽度,最大字体计算。能让文本全部显示,的最大font
    5. 限制最大行数与宽度,求最大高度
    6. 大多数都有链式调用的方法,但是这些方法并不安全,在self为nil的时候,因为传入的self隐藏参数不合法,导致崩溃!!

    代码

    只用一句话就可以计算高度、宽度


    /**
    * 获取最大行数
    */
    - (NSInteger) getMaxLineWithSize: (CGSize)maxSize ;
    - (NSInteger (^)(CGSize maxSize)) getMaxLineWithMaxSize;
    
    /**
    获取高度
    
    @param w 约定宽度
    @return 特定w下的H
    */
    - (CGFloat) getHeightWithWidth: (CGFloat)w;
    - (CGFloat(^)(CGFloat w)) getHeightWithMaxW;
    /**
    获取宽度
    
    @param H 高度
    @return 特定H下的W
    */
    - (CGFloat) getWidthWithHeight: (CGFloat)H;
    - (CGFloat(^)(CGFloat H)) getWidthtWithMaxH;
    
    /**
    获取size
    
    @param size 约束的size
    @return size
    */
    - (CGSize) getSizeWithSize: (CGSize) size;
    
    /**
    * @brief  获取某一行的frame,
    
    * @param numberOfLines ,第numberOfLines的frame,
    * @warning numberOfLines 从0 开始计数 而不是1
    * @warning 如果numberOfLines > 最大行数,那么返回最后一行的frame
    * @return 如果没有text,或者attributedString,返回CGRectZero,
    */
    - (CGRect) getNumberOfLineFrame:(NSInteger)numberOfLines
                           andSize:(CGSize)maxSize;
    
    - (CGRect)getLineBounds:(CTLineRef)line
                     point:(CGPoint)point;
    
    /**
    根据 self.attributedString 的length 获取缩放后的font与当前宽度
    @param maxWidth 最大宽度
    @param maxFont 最大的font
    @return 计算后的近似font值与对应的width
    @warning 返回的是能全部显示情况下的 最大的Width,与最大font,
    @warning self.font 必须是统一字体。不能多字体
    */
    - (NSMutableAttributedString *) scaleFontByMaxWidth: (CGFloat)maxWidth
                                        andMaxFont: (UIFont *)maxFont
                                          andBlock: (void(^)(UIFont *font, CGFloat currentWidth))block ;
    

    demo地址

    相关文章

      网友评论

          本文标题:OC_NSAttributedString工具 & 计算size

          本文链接:https://www.haomeiwen.com/subject/ezrlfqtx.html