自定义cell的高度

来源:互联网 发布:电子秤数据采集 编辑:程序博客网 时间:2024/05/23 01:24
自定义cell的高度:
1.把模型数据再次改写成 一个拥有frame和模型数据的模型类
2.在设置数据的frame类中把 拥有模型数据和frame的模型类 赋值
3.在代理方法中heightForRow中只要拿到拥有frame和数据模型的模型类就可以
算出高度了

1.新建一个继承自UITableViewCell的类

2.重写initWithStyle:reuseIdentifier:方法

Ø添加所有需要显示的子控件(不需要设置子控件的数据和frame,  子控件要添加到contentView中)
Ø进行子控件一次性的属性设置(有些属性只需要设置一次, 比如字体\固定的图片)

3.提供2个模型

Ø数据模型: 存放文字数据\图片数据
Øframe模型: 存放数据模型\所有子控件的frame\cell的高度

4.cell拥有一个frame模型(不要直接拥有数据模型)

5.重写frame模型属性的setter方法: 在这个方法中设置子控件的显示数据和frame

6.frame模型数据的初始化已经采取懒加载的方式(每一个cell对应的frame模型数据只加载一次)


demo:

// 昵称的字体

#define NameFont [UIFont systemFontOfSize:14]

// 正文的字体

#define TextFont [UIFont systemFontOfSize:15]


#import "MJStatusFrame.h"

#import "MJStatus.h"//模型


@implementation MJStatusFrame


/**

 *  计算文字尺寸

 *

 *  @param text    需要计算尺寸的文字

 *  @param font    文字的字体

 *  @param maxSize 文字的最大尺寸

 */

- (CGSize)sizeWithText:(NSString *)text font:(UIFont *)font maxSize:(CGSize)maxSize

{

    NSDictionary *attrs = @{NSFontAttributeName : font};

    return [text boundingRectWithSize:maxSize options:NSStringDrawingUsesLineFragmentOriginattributes:attrs context:nil].size;

}



- (void)setStatus:(MJStatus *)status

{

    _status = status;

    

   // 子控件之间的间距

    CGFloat padding =10;

    

    // 1.头像

    CGFloat iconX = padding;

    CGFloat iconY = padding;

    CGFloat iconW =30;

    CGFloat iconH =30;

    _iconF =CGRectMake(iconX, iconY, iconW, iconH);

    

    // 2.昵称

    // 文字的字体

    CGSize nameSize = [selfsizeWithText:self.status.namefont:NameFontmaxSize:CGSizeMake(MAXFLOAT,MAXFLOAT)];

    CGFloat nameX =CGRectGetMaxX(_iconF) + padding;

    CGFloat nameY = iconY + (iconH - nameSize.height) *0.5;

    _nameF =CGRectMake(nameX, nameY, nameSize.width, nameSize.height);

    

    // 3.会员图标

    CGFloat vipX =CGRectGetMaxX(_nameF) + padding;

    CGFloat vipY = nameY;

    CGFloat vipW =14;

    CGFloat vipH =14;

    _vipF =CGRectMake(vipX, vipY, vipW, vipH);

    

    // 4.正文

    CGFloat textX = iconX;

    CGFloat textY =CGRectGetMaxY(_iconF) + padding;

    CGSize textSize = [selfsizeWithText:self.status.textfont:TextFontmaxSize:CGSizeMake(300,MAXFLOAT)];

    _textF =CGRectMake(textX, textY, textSize.width, textSize.height);

    

    // 5.配图

    if (self.status.picture) {//有配图

        CGFloat pictureX = textX;

        CGFloat pictureY =CGRectGetMaxY(_textF) + padding;

        CGFloat pictureW =100;

        CGFloat pictureH =100;

        _pictureF =CGRectMake(pictureX, pictureY, pictureW, pictureH);

        

        _cellHeight =CGRectGetMaxY(_pictureF) + padding;

    } else {

        _cellHeight =CGRectGetMaxY(_textF) + padding;

    }

}

@end





0 0
原创粉丝点击