zoukankan      html  css  js  c++  java
  • 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;
    }
    
    
  • 相关阅读:
    题解【51nod 1290 Counting Diff Pairs】
    题解【luogu3709 大爷的字符串题】
    数据库唯一索引冲突不抛出异常的两种方式
    git 查看远程分支最后一次提交时间
    Java占位符
    IntelliJ IDEA注册码
    git忽略本地文件
    ThreadPoolExecutor参数
    MyBatis是如何解决Sql注入的
    Java 泛型
  • 原文地址:https://www.cnblogs.com/dujiahong/p/7728141.html
Copyright © 2011-2022 走看看