iOS 开发--相对来说比较简单的cell高度自适应

开发过程中,会很少使用系统自带的cell,一般都会自定义cell,用来展示各式各样的界面布局,所以我们要自定义cell---------项目中用过很多种cell高度自适应的算法,都感觉挺麻烦的,这个方法相对来说简单易懂,希望对大家有帮助

1、创建存储数据类:

iOS 开发--相对来说比较简单的cell高度自适应

2、创建自定义cell类:.h文件

1
2
3
4
5
6
7
8
9
# import   @ class   HHPollingItemsModel;
@ interface   HHPollingDetailCell : UITableViewCell
@property (nonatomic, strong) UILabel *titleLabel;
@property (nonatomic, strong) UILabel *lineLabel;
@property (nonatomic, strong) UILabel *valueLabel;
@property (nonatomic, strong) HHPollingItemsModel *model;
//类方法,返回的值用来计算cell的高度
+ (CGFloat)heightWithModel:(HHPollingItemsModel *)model;
@end

.m文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# import   "HHPollingDetailCell.h"
# import   "HHPollingItemsModel.h"
@implementation HHPollingDetailCell
//初始化自定义控件
- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
     if   (self = [ super   initWithStyle:style reuseIdentifier:reuseIdentifier]) {
         self.titleLabel = [[UILabel alloc] init];
         self.titleLabel.font = [UIFont systemFontOfSize: 14.0 ];
         self.titleLabel.numberOfLines =  0 ;
         self.titleLabel.textColor = kColor( 164 164 164 );
         [self addSubview:self.titleLabel];
          
         self.valueLabel = [[UILabel alloc] init];
         self.valueLabel.font = [UIFont systemFontOfSize: 14.0 ];
         self.valueLabel.textColor = kColor( 164 164 164 );
         [self addSubview:self.valueLabel];
         _lineLabel = [[UILabel alloc] init];
         _lineLabel.backgroundColor = [UIColor colorWithHexString:@ "#E4EEF0" ];
         [self addSubview:_lineLabel];
     }
     return   self;
}
//由于cell的布局特殊化,所有约束条件都在layoutSubviews方法中写
- ( void )layoutSubviews
{
     [ super   layoutSubviews];
      
     [self.valueLabel mas_makeConstraints:^(MASConstraintMaker *make) {
         make.centerY.equalTo(self);
         make.right.equalTo(self). with .offset(- 15 );
         make.height.equalTo(@( 14 ));
     }];
      
     //由于cell的高度是用该控件来撑开,所以不用给它高度约束
     [self.titleLabel mas_makeConstraints:^(MASConstraintMaker *make) {
         make.top.equalTo(self). with .offset( 10 );
         make.left.equalTo(self). with .offset( 15 );
         make.right.equalTo(self). with .offset(- 70 );
     }];
     [_lineLabel mas_makeConstraints:^(MASConstraintMaker *make) {
         make.bottom.equalTo(self);
         make.left.equalTo(self);
         make.right.equalTo(self);
         make.height.equalTo(@( 1 ));
     }];
}
//model的set方法,用来给自定义控件赋值
- ( void )setModel:(HHPollingItemsModel *)model
{
     if   ([model.itemType isEqualToString:@ "0" ]) {
         self.titleLabel.text = [NSString stringWithFormat:@ "%@" , model.itemName];
         self.valueLabel.text = model.itemValue;
     else   if   ([model.itemType isEqualToString:@ "1" ]) {
         self.titleLabel.text = [NSString stringWithFormat:@ "%@/%@" , model.itemName, model.itemContent];
         self.valueLabel.text = model.itemValue;
     else   {
         self.titleLabel.text = [NSString stringWithFormat:@ "%@" , model.itemName];
         self.valueLabel.text = model.itemValue;
     }
}
//注意:这是写这篇文章的重中之重,核心代码
+ (CGFloat)heightWithModel:(HHPollingItemsModel *)model
{
     HHPollingDetailCell *cell = [[HHPollingDetailCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@ "" ];
     [cell setModel:model];
     [cell layoutIfNeeded];
     CGRect frame = cell.titleLabel.frame;
     return   frame.origin.y + frame.size.height +  10 ;
}
@end

3、最后一步:在含有tableView的控制器中调用cell中的类方法,用来计算动态的cell高度

1
2
3
4
5
6
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
     //取出model
     HHPollingItemsModel *model = self.items[indexPath.row];
     return   [HHPollingDetailCell heightWithModel:model];
}

好了,这就是cell高度自适应的全过程,亲测使用带有图片、文字或者图片加文字的cell高度自适应

下面就是自适应后的布局:

iOS 开发--相对来说比较简单的cell高度自适应

iOS 开发--相对来说比较简单的cell高度自适应

还有更简单更实用的,望多指教,谢谢!


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值