Masonry和FDTemplateLayoutCell 结合使用示例Demo
我们知道,界面布局可以用Storyboard或Xib结合Autolayout实现,如果用纯代码布局,比较热门的有Masonry、SDAutoLayout,下面的简单demo,采用纯代码布局,实现不定高tableview。
实现方式:Masonry + FDTemplateLayoutCell
先上图:

其中:1和2都是UILabel,内容不固定,所以高度也不固定,3是view,可用作点赞和评论或其他用途。
话不多说,上代码:
1、准备工作
pods集成:
pod 'UITableView+FDTemplateLayoutCell'
pod 'Masonry'
2、新建cell,由于头像我用的网络图片,要事先集成一下SDWebImage
#import "FDTMasoryCell.h"
#import "Masonry.h"
#import "UIImageView+WebCache.h"
-(instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
self.backgroundColor = [UIColor clearColor];
[self initViews];
}
return self;
}
-(void)initViews{
//头像icon
icon = [[UIImageView alloc] init];
[self.contentView addSubview:icon];
//高宽40,顶端和左边距离10px
[icon mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.equalTo(self.contentView).offset(10);
make.top.equalTo(self.contentView).offset(10);
make.width.and.height.offset(40);
}];
//标题title
lblTitle = [UILabel new];
[self.contentView addSubview:lblTitle];
//高20,左边距离头像10px,顶部距离contentview10px,右边距离15px(为什么是-15,因为ios内原点是左上角,所以右边和底部间距要负数)
[lblTitle mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.equalTo(icon.mas_right).offset(10);
make.top.equalTo(self.contentView).offset(10);
make.right.equalTo(self.contentView).offset(-15);
make.height.mas_equalTo(20);
}];
//描述内容1
lblDesc = [UILabel new];
lblDesc.backgroundColor = [UIColor redColor];
lblDesc.numberOfLines = 0;
[self.contentView addSubview:lblDesc];
//不定高label,顶端距离title 10px,左边距离icon 10px, 右边距离 15px
[lblDesc mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(lblTitle.mas_bottom).offset(10);
make.left.equalTo(icon.mas_right).offset(10);
make.right.equalTo(self.contentView).offset(-15);
}];
//描述内容2
lblDesc2 = [UILabel new];
lblDesc2.numberOfLines = 0;
lblDesc2.backgroundColor = [UIColor yellowColor];
[self.contentView addSubview:lblDesc2];
//不定高label,顶端距离描述内容1 10px,左边距离icon 10px, 右边距离 15px
[lblDesc2 mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(lblDesc.mas_bottom).offset(10);
make.left.equalTo(icon.mas_right).offset(10);
make.right.equalTo(self.contentView).offset(-15);
}];
//其他
viewComment = [[UIView alloc] init];
viewComment.backgroundColor = [UIColor orangeColor];
[self.contentView addSubview:viewComment];
//高25,顶端距离内容2 10px,左边距离和内容2齐平, 右边距离 15px
[viewComment mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(lblDesc2.mas_bottom).offset(10);
make.left.equalTo(lblDesc2);
make.height.mas_equalTo(25);
make.right.bottom.equalTo(self.contentView).offset(-15);
}];
}
-(void)fill:(FDTModel *)model{
[icon sd_setImageWithURL:[NSURL URLWithString:model.iconUrl] placeholderImage:[UIImage imageNamed:@"iconDefault"]];
lblTitle.text = model.title;
lblDesc.text = model.desc;
lblDesc2.text = model.desc;
}
3、控制器 tableviewview
#import "FDTMasoryCell.h"
#import "FDTModel.h"
#import "UITableView+FDTemplateLayoutCell.h"
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
self.view.backgroundColor = [UIColor whiteColor];
_tableview = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, KScreenWidth, KScreenHeight) style:UITableViewStylePlain];
_tableview.delegate = self;
_tableview.dataSource = self;
//[_tableview registerNib:[UINib nibWithNibName:@"FDTCell" bundle:nil] forCellReuseIdentifier:cellID];
[_tableview registerClass:[FDTMasoryCell class] forCellReuseIdentifier:cellMasonryID];
[self.view addSubview:_tableview];
}
#pragma mark - tableview
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
return self.dataArry.count;
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
//FDTCell *cell = [tableView dequeueReusableCellWithIdentifier:cellID];
FDTMasoryCell *cell = [tableView dequeueReusableCellWithIdentifier:cellMasonryID];
FDTModel *model = self.dataArry[indexPath.row];
[cell fill:model];
return cell;
}
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
return [tableView fd_heightForCellWithIdentifier:cellMasonryID cacheByIndexPath:indexPath configuration:^(id cell) {
FDTModel *model = self.dataArry[indexPath.row];
[cell fill:model];
}];
}
PS:
1、tableview这里用法跟平常一样,唯一区别以及最关键的就是代理内的:heightForRowAtIndexPath方法
这里用到了 UITableView+FDTemplateLayoutCell 处理高度,用法简单明了,再也不用自己根据内容一个个计算了!
2、cell内,我是简单用了三层view,大家也可以按自己需求改动cell即可。
3、这里cell,我是用masonry布局,当然也可以用系统Autolayout添加约束实现布局,有时候cell内如果内容不多,用约束反而更简单。
Last,经过以上三步,一个简单的排列效果就出来了,大家都试试吧。。
有任何疑问,欢迎留言~~~
Masonry和FDTemplateLayoutCell 结合使用示例Demo的更多相关文章
- AutoLayout初战----Masonry与FDTemplateLayoutCell实践
学iOS也有几个月了.一直都是纯代码开发,菜鸟入门,到今天还处在Frame时代.刚好近期项目在提审.有点时间能够学学传说中的AutoLayout.事实上.就是android的相对布局(Relative ...
- iOS之ProtocolBuffer搭建和示例demo
这次搭建iOS的ProtocolBuffer编译器和把*.proto源文件编译成*.pbobjc.h 和 *.pbobjc.m文件时,碰到不少问题! 搭建pb编译器到时没有什么问题,只是在把*.pro ...
- c#实例化继承类,必须对被继承类的程序集做引用 .net core Redis分布式缓存客户端实现逻辑分析及示例demo 数据库笔记之索引和事务 centos 7下安装python 3.6笔记 你大波哥~ C#开源框架(转载) JSON C# Class Generator ---由json字符串生成C#实体类的工具
c#实例化继承类,必须对被继承类的程序集做引用 0x00 问题 类型“Model.NewModel”在未被引用的程序集中定义.必须添加对程序集“Model, Version=1.0.0.0, Cu ...
- 利用webuploader插件上传图片文件,完整前端示例demo,服务端使用SpringMVC接收
利用WebUploader插件上传图片文件完整前端示例demo,服务端使用SpringMVC接收 Webuploader简介 WebUploader是由Baidu WebFE(FEX)团队开发的一 ...
- 百度编辑器UEditor ASP.NET示例Demo 分类: ASP.NET 2015-01-12 11:18 346人阅读 评论(0) 收藏
在百度编辑器示例代码基础上进行了修改,封装成类库,只需简单配置即可使用. 完整demo下载 版权声明:本文为博主原创文章,未经博主允许不得转载.
- 使用Nancy搭建简单的Http服务的示例demo
刚刚接触Nancy没几天,暂时还不会使用Nancy来做web开发,只是使用Nancy实现了一个简单的Http服务的Demo程序,实现对Post和Get请求的处理. Demo的示例代码地址如下:http ...
- Windows上配置Mask R-CNN及运行示例demo.ipynb
最近做项目需要用到Mask R-CNN,于是花了几天时间配置.简单跑通代码,踩了很多坑,写下来分享给大家. 首先贴上官方Mask R-CNN的Github地址:https://github.com/m ...
- php中钩子(hook)的应用示例demo
我们先来回顾下原本的开发流程:产品汪搞出了一堆需求:当用户注册成功后需要发送短信.发送邮件等等:然后聪明机智勇敢的程序猿们就一扑而上:把这些需求转换成代码扔在 用户注册成功 和 跳转到首页 之间: 没 ...
- ASP.NET处理301重定向方法 带示例 (demo)
System.Web.HttpContext.Current.Response.Status = "301 Moved Permanently"; System.Web.HttpC ...
随机推荐
- 前端学HTTP之数据传输
× 目录 [1]客户机处理 [2]集线器处理 [3]路由器1处理[4]路由器2处理[5]交换机处理[6]服务器处理[7]反向传输 前面的话 上一篇中,介绍了网络基础.本文将详细介绍客户机在浏览网页ab ...
- java发送http的get、post请求
转载博客:http://www.cnblogs.com/zhuawang/archive/2012/12/08/2809380.html Http请求类 package wzh.Http; impor ...
- Log4net入门(帮助类篇)
在前几篇Log4net入门文件的讲述过程中,我们在使用log4net的类中都要编写如下一行代码: private static log4net.ILog log = log4net.LogManage ...
- 【Oracle 集群】11G RAC 知识图文详细教程之RAC在LINUX上使用NFS安装前准备(六)
RAC在LINUX上使用NFS安装前准备(六) 概述:写下本文档的初衷和动力,来源于上篇的<oracle基本操作手册>.oracle基本操作手册是作者研一假期对oracle基础知识学习的汇 ...
- Linux平台oracle 11g单实例 安装部署配置 快速参考
1.重建主机的Oracle用户 组 统一规范 uid gid 以保证共享存储挂接或其他需求的权限规范 userdel -r oracle groupadd -g 7 oinstall groupadd ...
- 读书笔记--SQL必知必会22--高级SQL特性
22.1 约束 约束(constraint),管理如何插入或处理数据库数据的规则. DBMS通过在数据库表上施加约束来实施引用完整性. 大多数约束是在表定义中定义的. 22.1.1 主键 主键,用来保 ...
- Web安全相关(一):跨站脚本攻击(XSS)
简介 跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS.恶意攻击者往Web页 ...
- 使用OWIN作为WebAPI的宿主
前言 好吧,也没什么好说的,就是个技术的总结,直接生成MVC的项目,感觉好重,虽然各种东西很全 ...也许我是处女座? - -, OWIN呃,这里我就不解释了,自己也是一知半解,可以参考 Open W ...
- c#+handle.exe实现升级程序在运行时自动解除文件被占用的问题
我公司最近升级程序经常报出更新失败问题,究其原因,原来是更新时,他们可能又打开了正在被更新的文件,导致更新文件时,文件被其它进程占用,无法正常更新而报错,为了解决这个问题,我花了一周时间查询多方资料及 ...
- [C1] 实现 C1FlexGrid 撤销还原功能
采用设计模式中的"命令模式"实现 C1FlexGrid 的撤销还原功能,那就先从命令模式简单介绍开始吧. 一 命令模式 命令模式属于对象的行为型模式,将一个请求封装为一个对象,从 ...