你还在用代码去计算行高吗?你不感觉那种方式很low吗?从今天起,试着做些改变吧!

别给我讲你喜欢写代码的感觉,你就是要用代码去计算行高,那我这篇文章不适合你。

在讲解复杂内容之前,还是先学习简单的内容,本篇就是讲解一些基本的内容。

一、纯文字Cell

一般我们用的都是UILabel控件,这个控件配合Autolayout简直是完美,废话不多说。

我们首先创建一个简单的工程,工程中我们创建一个UITableViewController子类,这里命名为LabelViewController,下图是一些初始配置

上面的第二步操作,我们也可以通过代码设置rowHeight和estimatedRowHeight为UITableViewAutomaticDimension来达到目的

接下来我们要对cell做一些配置,我们只做一些简单的约束设置就能达到目的,我们往cell的Content View上添加一个UILabel,设置约束如下图:

好了,现在我们可以去写代码了,我们创建一个UITableViewCell的子类,命名为LabelCell(这里是个人习惯,你也可以不创建),代码如下:

#import <UIKit/UIKit.h>

@interface LabelCell : UITableViewCell

- (void)showText:(NSString *)text;

@end
#import "LabelCell.h"

@interface LabelCell ()
@property (weak, nonatomic) IBOutlet UILabel *textLabel; @end @implementation LabelCell - (void)awakeFromNib {
[super awakeFromNib];
// Initialization code
} - (void)showText:(NSString *)text {
self.textLabel.text = text;
} - (void)setSelected:(BOOL)selected animated:(BOOL)animated {
[super setSelected:selected animated:animated]; // Configure the view for the selected state
} @end

现在回到我们创建的LabelViewController类中,首先贴上代码

@interface LabelViewController ()
@property (nonatomic, strong) NSArray *datas;
@end @implementation LabelViewController - (void)viewDidLoad {
[super viewDidLoad]; self.datas = @[@"中新网1月13日电 据教育部网站消息,教育部日前发布关于做好2018年春节寒假期间有关工作的通知,强调要扎实做好校园安全工作,要在放假前开学前分别开展一次校园安全大", @"《通知》要求,用心务实做好师生特别是困难师生走访慰问工作。各级领导干部要主动深入基层,深入教学一线,深入师生群众,深入农村偏远艰苦地区了解实际情况。要重点关心关注农村留守儿童、随迁子女、经济困难学生、残疾学生等群体的学习生活情况,创造条件促进解决实际困难"];
} - (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
} #pragma mark - Table view data source
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return self.datas.count;
} - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
LabelCell *cell = [tableView dequeueReusableCellWithIdentifier:@"LabelCell" forIndexPath:indexPath]; [cell showText:self.datas[indexPath.row]];
return cell;
}
@end

到此为止,我们已经完成了所有设置,运行程序看看

达到了我们的预期,不在去计算文字的高就能完美适配行高。

二、图片Cell

我们在同一个工程中创建所需内容,在Main.storyboard中再拖入一个UITableViewController,同样要设置对应的UITableView类的rowHeight和estimatedRowHeight为UITableViewAutomaticDimension,你可以选择在storyboard(参考上面设置)中或者代码设置。往Cell中拖入一个UIImageView,约束参考下图:

其实这些设置已经达到了高度自适应,可我还是要给你接下来的代码,创建一个ImageViewController类,和刚刚创建的UITableViewController绑定,再创建一个ImageCell类,和UITableViewController中的Cell绑定。

#import <UIKit/UIKit.h>

@interface ImageCell : UITableViewCell

- (void)showDataWithImageName:(NSString *)imageName;

@end
#import "ImageCell.h"

@interface ImageCell ()
@property (weak, nonatomic) IBOutlet UIImageView *testImageView; @end @implementation ImageCell - (void)awakeFromNib {
[super awakeFromNib];
// Initialization code
} - (void)showDataWithImageName:(NSString *)imageName {
self.testImageView.image = [UIImage imageNamed:imageName];
} - (void)setSelected:(BOOL)selected animated:(BOOL)animated {
[super setSelected:selected animated:animated]; // Configure the view for the selected state
} @end
@interface ImageViewController ()
@property (nonatomic, strong) NSArray *datas; @end @implementation ImageViewController - (void)viewDidLoad {
[super viewDidLoad];
self.datas = @[@"test1", @"test2", @"test3"];
} - (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated.
} - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return self.datas.count;
} - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
ImageCell *cell = [tableView dequeueReusableCellWithIdentifier:@"ImageCell" forIndexPath:indexPath]; [cell showDataWithImageName:self.datas[indexPath.row]]; return cell;
} @end

运行程序,如果没有错误的话,可以达到我们需要的自适应,看下图:

以上总的来说就是将rowHeight和estimatedRowHeight设置为UITableViewAutomaticDimension,并且约束设置好,我们就不需要用代码去计算行高。由于本篇不是讲解约束的的文章,所以不会拉约束的人,你可以看看这:https://developer.apple.com/library/content/documentation/UserExperience/Conceptual/AutolayoutPG/

后续我将发布更复杂的Cell自适应文章,感兴趣的可以关注我,

以上工程代码可以从这里下载:https://gitee.com/yyxy/UITableViewDemo

UITableView!别再用代码计算行高了(一)的更多相关文章

  1. IOS第八天(5:UITableViewController新浪微博, 计算行高)

    在 4 的 基础上重写 以下的方法 control #pragma mark - 代理方法 /** 计算单元格行高 */ - (CGFloat)tableView:(UITableView *)tab ...

  2. UITableView+FDTemplateLayoutCell计算行高显示<二>

    之前记录过一篇UITableView+FDTemplateLayoutCell计算行高不成功的博客... 传送门:http://www.cnblogs.com/pengsi/p/6571311.htm ...

  3. iOS 根据字符串内容动态计算行高

    + (CGFloat)textHeightFromTextString:(NSString *)text width:(CGFloat)textWidth fontSize:(CGFloat)size ...

  4. 一个简单的代码计算行数demo编写

    最近手头的项目基本上已经完结,历经了5个月的开发和迭代,各种的需求调整,想对自己的代码量进行一个客观的计算,于是抽了点时间写下了这个小demo,朋友们有需要的可以看看,很简单. 基本的思想就是:根目录 ...

  5. 动态的计算行高 加载数据源 有多少显示多少 tableView 包含 colloctionView 显示复杂的界面写法

    有时候,我们经常碰到这样的需求 先遵守代理 @interface PublishCollectionCell ()<UICollectionViewDataSource, UICollectio ...

  6. lable计算行高

    _introduce.text=status.introduce; //设置行间距 NSMutableAttributedString *attributedString = [[NSMutableA ...

  7. 对tableView三种计算动态行高方法的分析

    tableView是一个神奇的东西,可以这么说,就算是一个初学者如果能把tableView玩的很6,那编一般的iOS的需求都问题不大了.tableView是日常开发中用烂了的控件,但是关于tableV ...

  8. UITableView、UICollectionView行高/尺寸自适应

    UITableView 我们都知道UITableView从iOS 8开始实现行高的自适应相对比较简单,首先必须设置estimatedRowHeight给出预估高度,设置rowHeight为UITabl ...

  9. iOS开发——UI进阶篇(三)自定义不等高cell,如何拿到cell的行高,自动计算cell高度,(有配图,无配图)微博案例

    一.纯代码自定义不等高cell 废话不多说,直接来看下面这个例子先来看下微博的最终效果 首先创建一个继承UITableViewController的控制器@interface ViewControll ...

随机推荐

  1. Vue下路由History mode导致页面无法渲染的原因

    用 Vue.js + vue-router 创建单页应用,是非常简单的.使用 Vue.js ,我们已经可以通过组合组件来组成应用程序,当你要把 vue-router 添加进来,我们需要做的是,将组件( ...

  2. thinkphp 中concat(连接)使用方法

    1.concat将title和id连接作为truename新的字段,left从url字段左侧开始截取25个字符,同理right也可. 2.getLastql用法:

  3. gettype

    取得变量的类型. 语法: string gettype(mixed var); 返回值: 字符串 函数种类: PHP 系统功能 内容说明 本函数用来取得变量的类型.返回的类型字符串可能为下列字符串其中 ...

  4. Java数据结构和算法(十三)——哈希表

    Hash表也称散列表,也有直接译作哈希表,Hash表是一种根据关键字值(key - value)而直接进行访问的数据结构.它基于数组,通过把关键字映射到数组的某个下标来加快查找速度,但是又和数组.链表 ...

  5. ADO.NET复习总结(6)-断开式数据操作

    一.基础知识 主要类及成员(和数据库无关的)(1)类DataSet:数据集,对应着库,属性Tables表示所有的表(2)类DataTable:数据表,对应着表,属性Rows表示所有的行(3)类Data ...

  6. vue源码入口文件分析

    开发vue项目有段时间了, 之前用angularjs 后来用 reactjs 但是那时候一直没有时间把自己看源码的思考记录下来,现在我不想再浪费这 来之不易的思考, 我要坚持!! 看源码我个人感觉非常 ...

  7. 如何使用mysql命令行

    现在向大家介绍mysql命令行下,从数据库的建立到表数据的删除全过程,希望对网友有所帮助 方法/步骤 1.登陆mysql 打cmd命令终端,如果已经添加了mysql的环境变量,可以直接使用命令 mys ...

  8. 本地计算机上的OracleOraDb10g_home1TNSListener服务启动后又停止了..........解决办法

    方法1.直接修改 listener.ora 我机器上的路径是: D:/Oracle/product/10.2.0/db_1/NETWORK/ADMIN/listener.ora 修改其中的 HOST ...

  9. Java多线程之线程的通信

    Java多线程之线程的通信 在总结多线程通信前先介绍一个概念:锁池.线程因为未拿到锁标记而发生的阻塞不同于前面五个基本状态中的阻塞,称为锁池.每个对象都有自己的锁池的空间,用于放置等待运行的线程.这些 ...

  10. linkin大话数据结构--Set

    Set 集合 Set 集合不允许包含相同的元素,如果试把两个相同的元素加入同一个 Set 集合中,则添加操作失败. Set 判断两个对象是否相同不是使用 == 运算符,而是根据 equals 方法.也 ...