博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【iOS】Masonry和FDTemplateLayoutCell搭配使用「UITableview自适应内容高度」
阅读量:6504 次
发布时间:2019-06-24

本文共 4093 字,大约阅读时间需要 13 分钟。

本文来自尚妆iOS团队

发表于,欢迎订阅!

准备:

1.FDTemplateLayoutCell
  • 由sunny大神出品的自动计算UITableviewCell高度

FDTemplateLayoutCell

UITableView-FDTemplateLayoutCell

2.Masonry
  • 目前最流行的AutoLayout框架,比较轻量级

将上述两个第三方下载后(或者使用Cocoapods)导入工程,然后创建所需文件,此时的工程目录:

工程目录


自定义UITableView

MyTableViewCell.h 创建Model属性,用来传值

#import 
#import "Model.h"@interface MyTableViewCell : UITableViewCell@property (nonatomic, strong)Model *model;@end

MyTableViewCell.m 使用Masonry布局

#import "MyTableViewCell.h"#import "Masonry.h"@implementation MyTableViewCell{    UILabel *_textLB;}- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier{    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];    if (self) {        [self createSubViews];    }    return self;}/** *  注意,不管布局多复杂,一定要有相对于cell.contentView的bottom的约束 */- (void)createSubViews{    _textLB = [UILabel new];    _textLB.backgroundColor = [UIColor orangeColor];    _textLB.numberOfLines = 0;    [self.contentView addSubview:_textLB];    [_textLB mas_makeConstraints:^(MASConstraintMaker *make) {        make.top.left.equalTo(self.contentView).offset(10);        make.bottom.right.equalTo(self.contentView).offset(-10);    }];}/** *  赋值 * *  @param model ViewController传递过来的Model用来赋值 */- (void)setModel:(Model *)model{    if (_model != model) {        _model = model;        _textLB.text = [NSString stringWithFormat:@"%@", model.text];    }}

Model数据模型

Model.h 创建数据属性

#import 
@interface Model : NSObject@property (nonatomic, copy)NSString *text;@end

Model.m (使用KVC时,如果代码中的key值不存在,会抛出异常,可以在类中通过重写它提供下面的这个方法来解决这个问题)

#import "Model.h"@implementation Model- (void)setValue:(id)value forUndefinedKey:(NSString *)key{    }@end

ViewController视图控制器

ViewController.h

#import 
@interface ViewController : UIViewController@end

ViewController.m 创建列表视图,并实现自适应高度

#import "ViewController.h"#import "MyTableViewCell.h"#import "Model.h"#import "UITableView+FDTemplateLayoutCell.h"@interface ViewController ()
@end@implementation ViewController{    NSMutableArray *_allDataArr;}- (void)viewDidLoad {    [super viewDidLoad];    // Do any additional setup after loading the view, typically from a nib.    self.view.backgroundColor = [UIColor lightGrayColor];    [self initailData];    [self createMianViews];}- (void)initailData{    _allDataArr = [NSMutableArray array];        /**     *  虚拟数据     */    for (NSInteger i = 0; i < 3; i++) {        Model *model = [Model new];        model.text = @"在东方世界里,挑选小公牛到竞技场角斗有一定的程序。每一头被带进场地的公牛都要向手持长矛刺它的斗牛士发起进攻。其勇敢程度是根据它不顾矛刃的刺痛向斗牛士进攻的次数来认真评定的";        [_allDataArr addObject:model];    }}- (void)createMianViews{    UITableView *myTableView = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStyleGrouped];    myTableView.backgroundColor = [UIColor whiteColor];    myTableView.delegate = self;    myTableView.dataSource = self;    myTableView.fd_debugLogEnabled = YES;       //打开自适应高度debug模式    [self.view addSubview:myTableView];    [myTableView registerClass:[MyTableViewCell class] forCellReuseIdentifier:@"cell"];    }- (void)didReceiveMemoryWarning {    [super didReceiveMemoryWarning];    // Dispose of any resources that can be recreated.}#pragma mark -UITableViewDataSource- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{    MyTableViewCell *cell = (MyTableViewCell *)[tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath];    [self setupModelOfCell:cell AtIndexPath:indexPath];    return cell;}- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{    return _allDataArr.count;}#pragma mark -UITableViewDelegate- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{    return [tableView fd_heightForCellWithIdentifier:@"cell" cacheByIndexPath:indexPath configuration:^(id cell) {        [self setupModelOfCell:cell AtIndexPath:indexPath];    }];}#warning 重点(自适应高度必须实现)//预加载Cell内容- (void)setupModelOfCell:(MyTableViewCell *)cell AtIndexPath:(NSIndexPath *)indexPath{    cell.model = [_allDataArr objectAtIndex:indexPath.row];}@end

运行结果:

运行结果

重点:

自适应内容高度关键

复杂视图:

复杂视图自适应内容高度

转载地址:http://tcqyo.baihongyu.com/

你可能感兴趣的文章
HDU 2049
查看>>
《Spring1之第十次站立会议》
查看>>
Unity Shader 噪声消融特效 - 剑灵死亡特效
查看>>
Eclipse 自动生成 Ant的Build.xml 配置文件
查看>>
添加一条信息到列表,如果重复就替换,
查看>>
C#基础第五天
查看>>
宝明34
查看>>
python 小数相加报错 invalid literal for int() with base 10
查看>>
【ubuntu】linux链接库
查看>>
uva 12325 枚举暴力 b
查看>>
多线程问题(JVM重排序)
查看>>
LeetCode 459 Repeated Substring Pattern
查看>>
POJ 3268 Silver Cow Party
查看>>
进程线程及堆栈关系的总结
查看>>
Android Camera开发:使用TextureView和SurfaceTexture预览Camera 基础拍照demo
查看>>
EMLS项目推进思考
查看>>
Eclipse快捷键 10个最有用的快捷键
查看>>
2018-2019-1 20165302 实验五 通讯协议设计
查看>>
快速寻找满足条件的两个数
查看>>
Java开发者必读的10篇精选优秀技术文章
查看>>