• 纯代码 mark


     

    #pragma mark - 代理方法

    // 得出方案:在这个方法返回之前就要计算cell的高度

    - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath

    {

      

        LZJStatus *status = self.statuses[indexPath.row];

        

        CGFloat space = 10;

        /** 图像 */

        CGFloat iconX = space;

        CGFloat iconY = space;

        CGFloat iconWH = 30;

        CGRect iconImageViewFrame = CGRectMake(iconX, iconY, iconWH, iconWH);

        

        /** 正文 */

        CGFloat textX = iconX;

        CGFloat textY = CGRectGetMaxY(iconImageViewFrame) + space;

        CGFloat textW = [UIScreen mainScreen].bounds.size.width - 2 * space;

        NSDictionary *textAtt = @{NSFontAttributeName : [UIFont systemFontOfSize:14]};

        // 最大宽度是textW,高度不限制

        CGSize textSize = CGSizeMake(textW, MAXFLOAT);

        CGFloat textH = [status.text boundingRectWithSize:textSize options:NSStringDrawingUsesLineFragmentOrigin attributes:textAtt context:nil].size.height;

        CGRect text_LabelFrame = CGRectMake(textX, textY, textW, textH);

        

        CGFloat cellHeight = 0;

        /** 配图 */

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

            CGFloat pictureWH = 100;

            CGFloat pictureX = iconX;

            CGFloat pictureY = CGRectGetMaxY(text_LabelFrame) + space;

            CGRect pictureImageViewFrame = CGRectMake(pictureX, pictureY, pictureWH, pictureWH);

            cellHeight = CGRectGetMaxY(pictureImageViewFrame) + space;

        } else {

            cellHeight = CGRectGetMaxY(text_LabelFrame) + space;

        }

     

      // self-sizing(iOS8 以后)

        // 告诉tableView所有cell的真实高度是自动计算的(根据设置的约束)

        self.tableView.rowHeight = UITableViewAutomaticDimension;

        // 设置估算高度

        //self.tableView.estimatedRowHeight = 44;

     

     

        return cellHeight;

    }

    @end

     

     

     ----------------------------------------------------------------------

    #define LZJTextFont [UIFont systemFontOfSize:14]

    #define LZJNameFont [UIFont systemFontOfSize:14]

    @interface LZJStatusCell ()

     

    /** 图像 */

    @property (nonatomic, weak) UIImageView *iconImageView;

    /** 昵称 */

    @property (nonatomic, weak) UILabel *nameLabel;

    /** vip */

    @property (nonatomic, weak) UIImageView *vipImageView;

    /** 正文 */

    @property (nonatomic, weak) UILabel *text_Label;

    /** 配图 */

    @property (nonatomic, weak) UIImageView *pictureImageView;

    @end

     

    @implementation XMGStatusCell

     

    // 添加子控件的原则:把所有有可能显示的子控件都先添加进去

    - (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier

    {

        if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {

            /** 图像 */

            UIImageView *iconImageView = [[UIImageView alloc] init];

            [self.contentView addSubview:iconImageView];

            self.iconImageView = iconImageView;

            

            /** 配图 */

            UIImageView *pictureImageView = [[UIImageView alloc] init];

            [self.contentView addSubview:pictureImageView];

            self.pictureImageView = pictureImageView;

            

            /** vip */

            UIImageView *vipImageView = [[UIImageView alloc] init];

            vipImageView.contentMode = UIViewContentModeCenter;

            vipImageView.image = [UIImage imageNamed:@"vip"];

            [self.contentView addSubview:vipImageView];

            self.vipImageView = vipImageView;

            

            /** 昵称 */

            UILabel *nameLabel = [[UILabel alloc] init];

            nameLabel.font = LZJNameFont;

            [self.contentView addSubview:nameLabel];

            self.nameLabel = nameLabel;

            

            /** 正文 */

            UILabel *text_Label = [[UILabel alloc] init];

            text_Label.font = LZJTextFont;

            text_Label.numberOfLines = 0;

            [self.contentView addSubview:text_Label];

            self.text_Label = text_Label;

        }

        return self;

    }

     

    - (void)layoutSubviews

    {

        [super layoutSubviews];

        CGFloat space = 10;

         /** 图像 */

        CGFloat iconX = space;

        CGFloat iconY = space;

        CGFloat iconWH = 30;

        self.iconImageView.frame = CGRectMake(iconX, iconY, iconWH, iconWH);

        

        /** 昵称 */

        CGFloat nameX = CGRectGetMaxX(self.iconImageView.frame) + space;

        CGFloat nameY = iconY;

        NSDictionary *nameAtt = @{NSFontAttributeName : LZJNameFont};

        // 计算昵称文字的尺寸

        CGSize nameSize = [self.status.name sizeWithAttributes:nameAtt];

        CGFloat nameW = nameSize.width;

        CGFloat nameH = nameSize.height;

        self.nameLabel.frame = CGRectMake(nameX, nameY, nameW, nameH);

        

        /** vip */

        if (self.status.isVip) {

            CGFloat vipX = CGRectGetMaxX(self.nameLabel.frame) + space;

            CGFloat vipW = 14;

            CGFloat vipH = nameH;

            CGFloat vipY = nameY;

            self.vipImageView.frame = CGRectMake(vipX, vipY, vipW, vipH);

        }

        

        /** 正文 */

        CGFloat textX = iconX;

        CGFloat textY = CGRectGetMaxY(self.iconImageView.frame) + space;

        CGFloat textW = self.contentView.frame.size.width - 2 * space;

        NSDictionary *textAtt = @{NSFontAttributeName : LZJTextFont};

        // 最大宽度是textW,高度不限制

        CGSize textSize = CGSizeMake(textW, MAXFLOAT);

        CGFloat textH = [self.status.text boundingRectWithSize:textSize options:NSStringDrawingUsesLineFragmentOrigin attributes:textAtt context:nil].size.height;

        self.text_Label.frame = CGRectMake(textX, textY, textW, textH);

        

         /** 配图 */

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

            CGFloat pictureWH = 100;

            CGFloat pictureX = iconX;

            CGFloat pictureY = CGRectGetMaxY(self.text_Label.frame) + space;

            self.pictureImageView.frame = CGRectMake(pictureX, pictureY, pictureWH, pictureWH);

        }

        

        

    }

     

    - (void)setStatus:(LZJStatus *)status

    {

        _status = status;

        self.iconImageView.image = [UIImage imageNamed:status.icon];

        self.nameLabel.text = status.name;

        

        if (status.isVip) {

            self.nameLabel.textColor = [UIColor orangeColor];

            self.vipImageView.hidden = NO;

        } else {

            self.vipImageView.hidden = YES;

            self.nameLabel.textColor = [UIColor blackColor];

        }

        

        self.text_Label.text = status.text;

        

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

            self.pictureImageView.hidden = NO;

            self.pictureImageView.image = [UIImage imageNamed:status.picture];

        } else { // 无配图

            self.pictureImageView.hidden = YES;

        }

        

    }

     

    @end

  • 相关阅读:
    脚本 页面截取
    net Email 发送(借助第三方)
    查询表、存储过程、触发器的创建时间和最后修改时间(转)
    ActionScript简介
    mysql 1064 USING BTREE问题
    浅谈SQL SERVER函数count()
    程序员学习能力提升三要素
    构建杀手级应用的 JavaScript 框架、工具和技术
    javascript刷新页面方法大全
    html页<![if IE]>...<![endif]>使用解说
  • 原文地址:https://www.cnblogs.com/liuzhenjie/p/5448922.html
Copyright © 2020-2023  润新知