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

iOS Autolayout 在tableView scrollView 适用 学习的更多相关文章

  1. iOS autoLayout总结

    本文转自 http://ruikq.github.io/ios/autolayout/uiscrollview/2015/01/27/iOS-autolayout%E6%80%BB%E7%BB%93. ...

  2. 从此爱上iOS Autolayout

    转:从此爱上iOS Autolayout 这篇不是autolayout教程,只是autolayout动员文章和经验之谈,在本文第五节友情链接和推荐中,我将附上足够大家熟练使用autolayout的教程 ...

  3. iOS 两个tableview的 瀑布流

    iOS 两个tableview的 瀑布流1. [代码]Objective-C     ////  DocViewController.m//  getrightbutton////  Created ...

  4. iOS安全些许经验和学习笔记

    http://bbs.pediy.com/showthread.php?t=209014 标题: [原创]iOS安全些许经验和学习笔记作者: MonkeyKey时间: 2016-03-30,16:32 ...

  5. 李洪强iOS开发之【零基础学习iOS开发】【01-前言】01-开篇

    从今天开始,我就开始更新[零基础学习iOS开发]这个专题.不管你是否涉足过IT领域,也不管你是理科生还是文科生,只要你对iOS开发感兴趣,都可以来阅读此专题.我尽量以通俗易懂的语言,让每个人都能够看懂 ...

  6. 解决TableView / ScrollView上的Menu问题(1滑出View区域还可点击2导致点击menu后View不能滑动)

    解决TableView / ScrollView上的Menu问题 1划出区域还可点击 重写CCMenu的触摸事件函数 TouchBegin/TouchMove/TouchCancle/TouchEnd ...

  7. 【转】IOS AutoLayout详解(三)用代码实现(附Demo下载)

    转载自:blog.csdn.net/hello_hwc IOS SDK详解 前言: 在开发的过程中,有时候创建View没办法通过Storyboard来进行,又需要AutoLayout,这时候用代码创建 ...

  8. IOS详解TableView——选项抽屉(天猫商品列表)

    在之前的有篇文章讲述了利用HeaderView来写类似QQ好友列表的表视图. 这里写的天猫抽屉其实也可以用该方法实现,具体到细节每个人也有所不同.这里采用的是点击cell对cell进行运动处理以展开“ ...

  9. iOS:在tableView中通过Masonry使用autolayout在iOS7系统出现约束崩溃

    一.出现崩溃情景: 给tableView创建一个头视图,也即tableHeaderView,然后使用Masonry并切换到iOS7/7.1系统给tableHeaderView中的所有子视图添加约束,此 ...

随机推荐

  1. 在ubuntu下安装ns2-allinone-2.35.tar.gz

    1.软件下载 首先先下载ns-allinone-2.35.tar.gz (下载路径http://sourceforge.net/projects/nsnam/files/),将其放到你/home/my ...

  2. Android中使用HttpClient发送Get请求

    这里要指定编码,不然服务器接收到的会是乱码的.

  3. Kafka具体解释五、Kafka Consumer的底层API- SimpleConsumer

    1.Kafka提供了两套API给Consumer The high-level Consumer API The SimpleConsumer API 第一种高度抽象的Consumer API,它使用 ...

  4. thinkphp5中的一些关于命名空间的tisp

    1.thinkphp5中公共函数文件common中,不需要use,也可以直接使用vendor中的类文件. 2.在类前面的反斜杠作用是,直接使用最外层的命名空间,有时不想use某个X类,却想使用X类时, ...

  5. JetNuke笔记 ( by quqi99 )

    http://blog.csdn.net/quqi99/article/details/1624223 ———————————————————————————————————————————————— ...

  6. 访问JavaBean

    <jsp:useBean> 标签可以在JSP中声明一个JavaBean,然后使用.声明后,JavaBean对象就成了脚本变量,可以通过脚本元素或其他自定义标签来访问.<jsp:use ...

  7. Servlet 客户端 HTTP 请求

    当浏览器请求网页时,它会向 Web 服务器发送特定信息,这些信息不能被直接读取,因为这些信息是作为 HTTP 请求的头的一部分进行传输的.您可以查看 HTTP 协议 了解更多相关信息. 以下是来自于浏 ...

  8. asp.net网站底部的版权信息实现代码且可维护

    网站底部的版权信息在特殊情况还是比较重要的所以在实现的时候一定要尽可能的做到可维护性,接下来将介绍一些技巧可达到可维护效果,感兴趣的你可不要错过了哈 一个大网站页面很多,如果每个版权信息直接写在下面, ...

  9. Android无线测试之—UiAutmator运行命令介绍与快速调试

    一.运行命令介绍: #Test.java package com.uiautomatortest; import android.os.Bundle; import android.os.Remote ...

  10. Python 基础函数

    函数: 在程序设计中,函数是指用于进行某种计算的一系列语句的有名称的组合. 定义一个函数时,需要指定函数的名称并写下一系列程序语句.定义时不会执行,运行代码时,先加载进内存中,之后使用名称来调用这个函 ...