精简计算UITableView文本高度
精简计算UITableView文本高度

本人视频教程系类 iOS中CALayer的使用
最终效果:

核心源码(计算文本高度的类)
NSString+StringHeight.h 与 NSString+StringHeight.m
//
// NSString+StringHeight.h
// USA
//
// Created by YouXianMing on 14/12/10.
// Copyright (c) 2014年 fuhuaqi. All rights reserved.
// #import <Foundation/Foundation.h>
#import <UIKit/UIKit.h> @interface NSString (StringHeight) - (CGFloat)heightWithLabelFont:(UIFont *)font withLabelWidth:(CGFloat)width; @end
//
// NSString+StringHeight.m
// USA
//
// Created by YouXianMing on 14/12/10.
// Copyright (c) 2014年 fuhuaqi. All rights reserved.
// #import "NSString+StringHeight.h" @implementation NSString (StringHeight) - (CGFloat)heightWithLabelFont:(UIFont *)font withLabelWidth:(CGFloat)width {
CGFloat height = ; if (self.length == ) {
height = ;
} else { // 字体
NSDictionary *attribute = @{NSFontAttributeName: [UIFont systemFontOfSize:.f]};
if (font) {
attribute = @{NSFontAttributeName: font};
} // 尺寸
CGSize retSize = [self boundingRectWithSize:CGSizeMake(width, MAXFLOAT)
options:
NSStringDrawingTruncatesLastVisibleLine |
NSStringDrawingUsesLineFragmentOrigin |
NSStringDrawingUsesFontLeading
attributes:attribute
context:nil].size; height = retSize.height;
} return height;
} @end
cell的源码:
WordCell.h 与 WordCell.m
//
// WordCell.h
// WordHeight
//
// Created by YouXianMing on 14/12/16.
// Copyright (c) 2014年 YouXianMing. All rights reserved.
// #import <UIKit/UIKit.h> @interface WordCell : UITableViewCell @property (nonatomic, strong) UILabel *words; @end
//
// WordCell.m
// WordHeight
//
// Created by YouXianMing on 14/12/16.
// Copyright (c) 2014年 YouXianMing. All rights reserved.
// #import "WordCell.h" @implementation WordCell - (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
_words = [[UILabel alloc] initWithFrame:CGRectMake(, , , )];
_words.font = [UIFont systemFontOfSize:.f];
_words.textColor = [UIColor grayColor];
_words.numberOfLines = ; [self addSubview:_words];
} return self;
} @end
控制器源码:
//
// ViewController.m
// WordHeight
//
// Created by YouXianMing on 14/12/16.
// Copyright (c) 2014年 YouXianMing. All rights reserved.
// #import "ViewController.h"
#import "WordCell.h"
#import "NSString+StringHeight.h" static NSString *wordCellReused = @"WordCell"; @interface ViewController ()<UITableViewDelegate, UITableViewDataSource> @property (nonatomic, strong) UITableView *tableView;
@property (nonatomic, strong) NSMutableArray *wordsArray;
@property (nonatomic, strong) NSMutableArray *wordsArrayHeight; @end @implementation ViewController - (void)viewDidLoad {
[super viewDidLoad]; // 关闭状态栏
[UIApplication sharedApplication].statusBarHidden = YES; // 创建数据源(谷歌翻译,莫见笑)
_wordsArray = [NSMutableArray array];
[_wordsArray addObject:
@"游贤明是一个iOS开发工程师,热爱技术,热爱生活,乐于奉献,喜欢打游戏,喜欢吃东西,是个吃货,喜欢学习,深信天道酬勤!"];
[_wordsArray addObject:
@"遊賢明はiOS開発エンジニア、愛する技術で、生活を愛し、献身、ゲームが好き、好きなものを食べて、美食愛好家、天道酬勤を学ぶことが好きで、信じ!"];
[_wordsArray addObject:
@"YouXianMing ist ein ios - entwickler, liebe, Leben, liebe, hingabe, Wie Spiele, der Gern Essen, ist ein Nahrungsmittel, Wie Lernen, Davon überzeugt, dass Gott!!!!!!!"];
[_wordsArray addObject:
@"YouXianMing 한 iOS 개발 엔지니어, 사랑 사랑 기술, 생활, 기꺼이 바치다, 좋아하는 게임만 좋아하는 것을 좋아하는 사람이다 가축, 학습, 확신하다 천도 보수 자주!"];
[_wordsArray addObject:
@"¡Gira el sabio es un ingeniero, el desarrollo de la tecnología de los ama, ama la vida, dedicación, como jugar el juego, me gusta comer, es un tragón, como el aprendizaje, convencidos de que Philip!"];
[_wordsArray addObject:
@"ว่ายน้ำที่ชาญฉลาดเป็น iOS วิศวกรพัฒนาเทคโนโลยีและรักชีวิตรักและทุ่มเทและชอบเล่นเกมชอบกินอะไรดีเลยชอบการเรียนรู้และเชื่อว่าไม่มีอะไรเลย"];
[_wordsArray addObject:
@"Nager sage est un ingénieur, le développement de la technologie iOS amour, de l'amour de la vie, de dévouement, de jouer le jeu, aime manger, c'est un bon à rien, comme l'apprentissage, convaincu que Tiandaochouqin!"];
[_wordsArray addObject:
@""]; // 创建存储数据源长度的数组
_wordsArrayHeight = [NSMutableArray array];
for (int i = ; i < _wordsArray.count; i++) {
NSString *tmpStr = _wordsArray[i];
CGFloat height = [tmpStr heightWithLabelFont:[UIFont systemFontOfSize:.f] withLabelWidth:];
[_wordsArrayHeight addObject:@(height)];
} // 创建tableView
_tableView = [[UITableView alloc] initWithFrame:self.view.bounds
style:UITableViewStylePlain];
_tableView.delegate = self;
_tableView.dataSource = self;
[_tableView registerClass:[WordCell class]
forCellReuseIdentifier:wordCellReused];
[self.view addSubview:_tableView];
} - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return [_wordsArray count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
WordCell *cell = [tableView dequeueReusableCellWithIdentifier:wordCellReused];
cell.selectionStyle = UITableViewCellSelectionStyleNone; // 获取文本
cell.words.text = _wordsArray[indexPath.row]; // 重新设定尺寸
cell.words.frame = CGRectMake(, , , ); // 约束后适配
[cell.words sizeToFit]; return cell;
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
return [_wordsArrayHeight[indexPath.row] floatValue];
} @end
几个需要注意的地方:


精简计算UITableView文本高度的更多相关文章
- YYLabel计算富文本高度-膜拜大神
http://www.jianshu.com/p/07cd655fee7e YYTextLayout *layout = [YYTextLayout layoutWithContainerSize:C ...
- 用Model来计算cell的高度
用Model来计算cell的高度 效果: 将计算cell高度的方法直接移植到Model当中,初始化的瞬间就计算好了高度,非常好用! 源码: Model // // Model.h // // Copy ...
- 计算纯文本情况下RichTextBox实际高度的正确方法(.NET)
2016-07-17重大更新 其实有更好.更系统的方法,也是最近才发现的,分享给大家!! /// <summary> /// /// </summary> ...
- Swift - 计算文本高度
Swift - 计算文本高度 效果 源码 // // String+StringHeight.swift // StringHeight // // Created by YouXianMing on ...
- iOS开发总结-UITableView 自定义cell和动态计算cell的高度
UITableView cell自定义头文件:shopCell.h#import <UIKit/UIKit.h>@interface shopCell : UITableViewCell@ ...
- AutoLayout深入浅出五[UITableView动态高度]
本文转载至 http://grayluo.github.io//WeiFocusIo/autolayout/2015/02/01/autolayout5/ 我们经常会遇到UITableViewCell ...
- AutoLayout处理UITableView动态高度
我们经常会遇到UITableViewCell的高度要跟随内容而调整,在未引入AutoLayout之前,我们使用以下方法计算Label高度,然后heightForRowAtIndexPath中返回计算的 ...
- iOS不得姐项目--精华模块上拉下拉的注意事项,日期显示,重构子控制器,计算cell的高度(只计算一次),图片帖子的显示
一.上拉下拉注意事项 使用MJRefresh中的上拉控件自动设置透明 当请求下页数据通过page的时候,注意的是上拉加载更多数据失败的问题,下拉加载数据失败了,页数应该还原.或者是请求成功的时候再将页 ...
- iOS6 以上设置文本高度,行高(转)
2013-12-09 我来说两句 来源:冻僵的企鹅'zone 收藏 我要投稿 在iOS 7之前,常用下面这个方法计算文本高度sizeWithFont:constrainedToS ...
随机推荐
- tomcat启动(五)Catalina分析-service.init
上篇写到StandardService.init() 这个方法做什么呢?一起来看看. 这个类也是实现了Lifecycle 如图.这个图中i表示Interface接口.如Lifecycle,Contai ...
- mysql 设置隔离级别
查看隔离级别: mysql> select @@tx_isolation; +-----------------+ | @@tx_isolation | +-----------------+ ...
- Maven 映像
国内连接maven官方的仓库更新依赖库,网速一般很慢,收集一些国内快速的maven仓库镜像以备用. ====================国内OSChina提供的镜像,非常不错=========== ...
- 利用meta标签将http请求换成https请求
最近网站升级为https之后,为了防止一些http文件没有修改而引起的问题,可以加一个meta标签: <meta http-equiv="Content-Security-Policy ...
- 深入了解Java虚拟机(2)垃圾收集器与内存分配策略
垃圾收集器与内存分配策略 由于JVM中对象的频繁操作是在堆中,所以主要回收的是堆内存,方法区中的回收也有,但是比较谨慎 一.对象死亡判断方法 1.引用计数法 就是如果对象被引用一次,就给计数器+1,否 ...
- ubuntu18---安装python3.6下的virtualenv15.1.0
动态语言Python有着自己的虚拟环境,虚拟环境是程序执行时的独立执行环境,在同一台服务器中可以创建不同的虚拟环境供不同的系统使用,项目之间的运行环境保持独立性而相互不受影响.例如项目A可以在基于Py ...
- Spring缓存注解@Cache,@CachePut , @CacheEvict,@CacheConfig使用
@Cacheable.@CachePut.@CacheEvict 注释介绍 表 1. @Cacheable 作用和配置方法 @Cacheable 的作用 主要针对方法配置,能够根据方法的请求参数对其结 ...
- Springboot集成SpringData JPA
序 StringData JPA 是微服务框架下一款ORM框架,在微服务体系架构下,数据持久化框架,主要为SpringData JPA及Mybatis两种,这两者的具体比较,本文不做阐述,本文只简单阐 ...
- C#观察者模式的应用与思考
1:项目场景 在设计数据表的时候有时候为了将来统计或查询的方便,我们会冗余一些字段.如有三张数据表,学校信息表.班级动态表.班级信息表. 班级动态由学校老师所发,可以进行评论点赞等操作,为了提升这种非 ...
- 【PyQt5 学习记录】010:QSplitter
import sys from PyQt5.QtWidgets import (QApplication, QWidget, QSplitter, QTextEdit, QPushButton, QL ...