• iOS UITableView 解决估算行高和指定行高的矛盾


    喜欢交朋友的加:微信号 dwjluck2013

    1、一般来说 在iOS 中若UITableViewCell 固定行高, 会通过

    - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
    {
             return 81;
    }

    来设置;

    2、如果需要由系统自动估算行高, 可以通过设置以下代码实现:

    // 动态行高
            self.tableView.rowHeight = UITableViewAutomaticDimension;
            // 预估行高
            self.tableView.estimatedRowHeight = 150;

    3、如果一个tableview即想用固定行高又想用预估行高(自动计算行高) 这两者的矛盾怎样解决呢?以下代码 关键在于 这句话:

    return UITableViewAutomaticDimension;
    - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        if (indexPath.section == 0 || indexPath.section == 1) {
                return 81;
        }
        // 注意:解决固定行高和系统自动计算行高  其他组走系统自动计算行高
        return UITableViewAutomaticDimension;
    }

     4.在cell中约束好之后 要写  self.contentView 的高度实际contentview的高度就是cell的高度 重点注意在cell中  子控件约束不能用

    contentView 约束 因为在设置self.contentView约束之前  self.contentView的高度都是0;

    例如:

    - (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
    {
        if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
            self.selectionStyle = UITableViewCellSelectionStyleNone;
            self.separatorInset = UIEdgeInsetsZero;
            
            [self.contentView addSubview:self.headerImageView];
            [self.contentView addSubview:self.titleLabel];
            [self.contentView addSubview:self.detailLabel];
            
            __weak typeof(self)weakself = self;
            [self.headerImageView mas_makeConstraints:^(MASConstraintMaker *make) {
                make.top.equalTo(weakself.mas_top).offset(10 / WIDTH_6S_SCALE);
                make.width.height.mas_offset(40 / WIDTH_6S_SCALE);
                make.left.equalTo(weakself.mas_left).offset(10 / WIDTH_6S_SCALE);
            }];
            [self.titleLabel mas_makeConstraints:^(MASConstraintMaker *make) {
                make.top.equalTo(weakself.headerImageView.mas_top);
                make.left.equalTo(weakself.headerImageView.mas_right).offset(15 / WIDTH_6S_SCALE);
                make.height.mas_offset(20 / HEIGHT_6S_SCALE);
            }];
            [self.detailLabel mas_makeConstraints:^(MASConstraintMaker *make) {
                make.left.equalTo(weakself.titleLabel.mas_left);
                make.right.equalTo(weakself).offset(-10 / WIDTH_5S_SCALE);
                make.top.equalTo(weakself.titleLabel.mas_bottom).offset(5 / WIDTH_6S_SCALE);
            }];
            
            [self.contentView mas_makeConstraints:^(MASConstraintMaker *make) {
                make.top.equalTo(weakself.headerImageView.mas_top).offset(-10 / WIDTH_5S_SCALE);
                make.left.right.equalTo(weakself);
                make.bottom.equalTo(weakself.detailLabel.mas_bottom).offset(10 / WIDTH_5S_SCALE);
            }];
        }
        return self;
    }
    
    
  • 相关阅读:
    Java 实例
    为什么很多程序员工作时都戴耳机?
    HTTP状态码大全
    Eclipse怎么切换工作空间
    maven POM.xml内的标签大全详解
    利用html5的FormData对象实现多图上传
    后台定时器注解方式
    js多定时器
    解决ios上微信无法捕获返回键按钮事件的问题
    上传文件,获取表单数据和文件流
  • 原文地址:https://www.cnblogs.com/dujiahong/p/7728141.html
Copyright © 2020-2023  润新知