计算文本长度—boundingRectWithSize

来源:互联网 发布:linux epoll和read 编辑:程序博客网 时间:2024/06/06 15:45

计算文本CGSize方法:

/*

 *  设置文本CGSize

 *

 *  @param string    文本内容

 *  @param fontSize  字体大小,需跟lable字体大小一致,否则会出现显示不全等问题

 *  @param width     宽度

 *  @param isBold    是否加粗

 *  @param style     文字内容设计(间距等)

 *  @param identify  计算高度缓存标识

 *

 *  @return 文本大小

 */

- (CGSize)sizeForString:(NSString *)string fontOfSize:(CGFloat)fontSize wordWidth:(CGFloat)width bold:(BOOL)isBold paragraphStyle: (NSMutableParagraphStyle *)style cacheIdentify: (NSString *)identify {

    

    CGFloat contentWidth = width;

    

    UIFont *font;

    if (isBold == YES) {

        font = [UIFont boldSystemFontOfSize:fontSize];

    }else{

        font = [UIFont systemFontOfSize:fontSize];

    }

    

    NSDictionary * dic = [NSDictionary dictionaryWithObjectsAndKeys:font,NSFontAttributeName,style,NSParagraphStyleAttributeName,nil];

    NSString *content = string;

    

    /*设置文本范围:

     *boundingRectWithSize属性:限定文本在固定范围内进行显示

     *contentWidth:代表最大宽度,到了最大宽度则换到下一行

     *CGFLOAT_MAX:代表长度不限

     *绘制文本时使用 NSStringDrawingUsesLineFragmentOrigin

     *context属性:文本上下文。可调整字间距以及缩放等。最终,该对象包含的信息将用于文本绘制。该参数可为nil

     */

    CGSize size = [content boundingRectWithSize:CGSizeMake(contentWidth, CGFLOAT_MAX) options:NSStringDrawingUsesLineFragmentOrigin attributes:dic context:nil].size;

    

    return size;

}


使用示例代码:

-(void)myTableViewCellAddData{

    

    NSArray* titleArray = @[@"WEPLUS北京 浦项中心",@"WEPLUS酷窝北京 光华路SOHO二期",@"WEPLUS北京 三元桥",@"北京 D9X 望京",@"北京 D9X 奥体",@"北京共作室Coffizz",@"北京 D9X Dream Lab"];

    

    CGFloat buttonPositionX = 15, buttonPositionY = 0;

    for (int i = 0; i < titleArray.count; i++) {

       //计算文本CGSize

       CGSize spaceNameSize = [self sizeForString:titleArray[i] fontOfSize:12 wordWidth:SCREEN_WIDTH bold:NO paragraphStyle:nil cacheIdentify:nil];

        

        if (buttonPositionX + spaceNameSize.width + 35 > SCREEN_WIDTH) {

            

            buttonPositionX = 15;

            buttonPositionY += 42;

        }

        

        UIButton* spaceButton = [UIButton buttonWithType:UIButtonTypeCustom];

        //通过文本的CGSize可计算出每个spaceButton的长度和frame

        spaceButton.frame = CGRectMake(buttonPositionX, buttonPositionY, spaceNameSize.width + 20, 27);

        spaceButton.layer.borderWidth = 0.5;

        spaceButton.layer.borderColor = [[UIColor hex_929292_Color] colorWithAlphaComponent:0.5].CGColor;

        [spaceButton setTitleColor:[UIColor hex_3A3B3C_Color] forState:UIControlStateNormal];

        

        spaceButton.titleLabel.font = [UIFont systemFontOfSize:12];

        [spaceButton setTitle:titleArray[i] forState:UIControlStateNormal];

        [self.contentView addSubview:spaceButton];

        

        if (buttonPositionX + spaceNameSize.width + 35 < SCREEN_WIDTH){

            

            buttonPositionX += spaceNameSize.width + 35;

        }

  }

   

}

//设置文本CGSize

- (CGSize)sizeForString:(NSString *)string fontOfSize:(CGFloat)fontSize wordWidth:(CGFloat)width bold:(BOOL)isBold paragraphStyle: (NSMutableParagraphStyle *)style cacheIdentify: (NSString *)identify {

    

    CGFloat contentWidth = width;

    

    UIFont *font;

    if (isBold == YES) {

        font = [UIFont boldSystemFontOfSize:fontSize];

    }else{

        font = [UIFont systemFontOfSize:fontSize];

    }

    

    NSDictionary * dic = [NSDictionary dictionaryWithObjectsAndKeys:font,NSFontAttributeName,style,NSParagraphStyleAttributeName,nil];

    NSString *content = string;

    

    CGSize size = [content boundingRectWithSize:CGSizeMake(contentWidth, CGFLOAT_MAX) options:NSStringDrawingUsesLineFragmentOrigin attributes:dic context:nil].size;

    

    return size;

}


效果图:





阅读全文
0 0
原创粉丝点击