1  如何自动适应cell的高度

autolayout  里面 使用 systemLayoutSizeFittingSize 方法 (系统通过 已知的完整的Constraints和view的属性来计算高度)根据一个cell实例计算高度.

优势:不需要写过多复杂的高度计算逻辑, 代码简洁.  强大

(1)首先依旧要在下面代理方法里实现读取cell 高度 heightForRowAtIndexPath:

(2)计算高度  还是要考虑两种情况

第一 如果不知道高度,计算一遍,存储(尽量只计算一次,然后保存高度,计算需要布局 也是一个效率问题)

第二 知道高度 直接读取

(3)关于cell的读取

第一种  纯代码 写法

这种 是我纯代码开发中经常用到的

(1)cell 初始化要override 方法

 - (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) { // TODO:cell页面布局
}
return self;
}

(2)  dequeue 获取cell 为空 要创建新cell

    static  NSString *cellIdentifier = @"AHFHomeListCell";
AHFHomeListCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (!cell) {//需要判空 ,如果为空 需要创建cell initWithStyle:reuseIdentifier cell = [[AHFHomeListCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier]; [cell.topicView setHandleSeletedOptionBlock:^(TopicOptions *options, TopicListModel *listModel,BOOL isOnlyRead) { NSString *optionId = isOnlyRead ? listModel.voted_option_id : options.option_id; [self openArticleVCArticleId:listModel.article_id img:listModel.banner andOptionId:[optionId integerValue] andIsRead:isOnlyRead]; }];
}

第二种 代码 加 注册cell

为tableView注册cell,使用registerClass:forCellReuseIdentifier:方法向数据源注册cell(注意是Class 即 [xxxxxCell class])

//register cell:
static NSString *kCellIdentify = @"MyTableViewCell";
[self.tableView registerClass:[xxxxxCell class] forCellReuseIdentifier:kCellIdentify];

//cellForRowAtIndexPath:
//第一种实现
//dequeueReusableCellWithIdentifier:forIndexPath: 方法会直接调用注册(所以必须有注册方法),不需要判断cell空值了就
MyTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MyTableViewCell" forIndexPath:indexPath];
//第二种实现
//dequeueReusableCellWithIdentifier:可以注册 之后 不需要判空,可以不注册需要判空如果为空 就创建新cell
static MyTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:kCellIdentify];
if (!cell) {
//如果使用 registerClass: 注册过 则此处不需要处理 否则需要创建cell initWithStyle:reuseIdentifier
} 
//TODO:填充UI数据

第三种 使用xib 加 注册 cell

使用 tableView 的 registerNib:forCellReuseIdentifier:方法向数据源注册cell

//register cell:

[self.tableView registerNib:[UINib nibWithNibName:@"MyTableViewCell" bundle:nil] forCellReuseIdentifier:kCellIdentify];
//cellForRowAtIndexPath:
实现规则同第二种方法里面的相应代码讲解

关于两种注册: registerNib: 与 registerClass: 为什么可以不用去判空 ?

因为无可复用cell时runtime将使用注册时提供的资源去新建一个cell并返回

2   如何在ScrollView中使用Autolayout (这里用Masonry 纯代码实    CGFloat scrollWidth = HorizontalFrom750( + );

    CGFloat scrollHeight =VerticalFrom750();
pageWidth = scrollWidth;
//设置scrollView 约束
[self.scrollView mas_makeConstraints:^(MASConstraintMaker *make) {
make.center.equalTo(self);
make.width.equalTo(@(scrollWidth));
make.height.equalTo(@(scrollHeight));
}];

//使用containView 作为容器View 在容器View里面塞入目标滚动的子对象
UIView *containView = UIView.new;
[self.scrollView addSubview:containView];
[containView mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.equalTo(self.scrollView);
make.height.equalTo(self.scrollView);
}];
self.cardViewArray = [NSMutableArray array];
self.cardButtonArray = [NSMutableArray array];
// 目标滚动元素 一个一个 add 在 conttainView上 注意边界问题
UIView *lastView;
CGFloat leftPadding = ; //边界
for (int i = ; i < pageCount; i ++) { UIView *backView = UIView.new;
[containView addSubview:backView];
[backView mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerY.equalTo(containView);
make.width.equalTo(@(scrollWidth));
make.height.equalTo(self.scrollView.mas_height);
if (lastView) {
make.left.equalTo(lastView.mas_right);
} else {
make.left.equalTo(@(leftPadding));
}
}]; lastView = backView; MethodMediaModel *music = self.musicArray[i]; MusicCardView *cardView = [[MusicCardView alloc]initWithFrame:CGRectZero];
[cardView setCardTitle:music.title imgUrl:music.img_url];
[cardView.playButton addTarget:self action:@selector(playAction:) forControlEvents:UIControlEventTouchUpInside];
cardView.playButton.tag = i;
[cardView.playButton setObj:music];
[backView addSubview:cardView];
[cardView mas_makeConstraints:^(MASConstraintMaker *make) {
make.center.equalTo(backView);
make.left.equalTo(backView).offset();
make.right.equalTo(backView).offset(- );
make.height.equalTo(backView);
}];
[self.cardViewArray addObject:backView];
[self.cardButtonArray addObject:cardView.playButton];
}
[lastView mas_updateConstraints:^(MASConstraintMaker *make) {
make.right.equalTo(containView.mas_right);//边界
}];

3   使用Autolayout做动画

//TODO:

4      Autolayout在IOS6上的坑

//TODO:

参考:

https://blog.cnbluebox.com/blog/2015/02/02/autolayout2/

http://blog.csdn.net/youngsblog/article/details/44536143

最新文章

  1. centOS7虚拟机上搭建kvm虚拟平台
  2. 控件(弹出类): ToolTip, Popup, PopupMenu
  3. Dashboard索引缺失、查询不到endpoint或counter
  4. Cassandra 分布式集群
  5. Goldengate trial队列维护
  6. source导入错码解决办法
  7. PHP中的Trait
  8. swift基本运算符
  9. GetMemory()函数
  10. 第七章——DMVs和DMFs(2)——用DMV和DMF监控索引性能
  11. POJ 3299 Humidex(简单的问题)
  12. CAP原理、一致性模型、BASE理论和ACID特性
  13. 通过 Service 访问 Pod - 每天5分钟玩转 Docker 容器技术(136)
  14. python_线程的开启、守护线程、锁、死锁、事件、定时器、条件、队列、池
  15. Shiro笔记(五)Shiro授权
  16. Java API获取consumer group最新提交位移的时间
  17. 初识springcloud
  18. Android 开发 框架系列 百度语音合成
  19. Bug 5323844-IMPDP无法导入远程数据库同义词的同义词
  20. JS基础(一)异常错误

热门文章

  1. Boolean 转 string
  2. 用@spy模拟真实对象的部分行为
  3. 使用Squid搭建HTTPS代理服务器
  4. 用Java实现一些常见的问题
  5. DBCP与C3P0数据库连接池
  6. boot2docker里报&quot;no space left on device&quot; error的解决方法
  7. 【ask】webstorm调试node单个js文件
  8. windows 下XAMPP 使用Nginx替代apache作为服务器
  9. Android 百度语音合成集成
  10. WINDOWS 7.1 SDK 安装失败