IOS TableView的Cell高度自适应,UILabel自动换行适应
需求:
1、表格里的UILable要求自动换行
2、创建的tableViewCell的高度会自动适应内容的高度
一、用xcode构建项目,创建一个有tableView的视图,用纯代码的形式实现:
1、创建一个UIViewController类,定义一个UITableView,实现TableView的委托和数据源协议
- //
- // TableViewController.h
- // AdaptiveCell
- //
- // Created by swinglife on 14-1-10.
- // Copyright (c) 2014年 swinglife. All rights reserved.
- //
- #import <UIKit/UIKit.h>
- @interface TableViewController : UIViewController<UITableViewDataSource,UITableViewDelegate>{
- }
- @property (nonatomic,retain) UITableView *tableView;
- @end
2、实现UITableView对象的初始化,声明一个tableData的数组对象用来保存tableView中得数据
- #import "TableViewController.h"
- @interface TableViewController (){
- NSMutableArray *tableData; //tableView数据存放数组
- }
- @end
- @implementation TableViewController
- - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
- {
- self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
- if (self) {
- tableData = [[NSMutableArray alloc] init];
- }
- return self;
- }
- - (void)viewDidLoad
- {
- [super viewDidLoad];
- [self initTableView];
- }
- //初始化tableView;
- -(void)initTableView{
- CGRect frame = self.view.frame;
- _tableView = [[UITableView alloc] initWithFrame:CGRectMake(frame.origin.x, frame.origin.y, frame.size.width, frame.size.height)];
- //代理类
- _tableView.delegate = self;
- //数据源
- _tableView.dataSource = self;
- [self.view addSubview:_tableView];
- }
3、创建自定义的UITableViewCell类,声明需要用到的控件对象和方法:
- #import <UIKit/UIKit.h>
- @interface TableViewCell : UITableViewCell{
- }
- //用户名
- @property(nonatomic,retain) UILabel *name;
- //用户介绍
- @property(nonatomic,retain) UILabel *introduction;
- //用户头像
- @property(nonatomic,retain) UIImageView *userImage;
- //给用户介绍赋值并且实现自动换行
- -(void)setIntroductionText:(NSString*)text;
- //初始化cell类
- -(id)initWithReuseIdentifier:(NSString*)reuseIdentifier;
- @end
4、初始化Cell的用户控件,实现方法:
- //
- // TableViewCell.m
- // AdaptiveCell
- //
- // Created by swinglife on 14-1-10.
- // Copyright (c) 2014年 swinglife. All rights reserved.
- //
- #import "TableViewCell.h"
- @implementation TableViewCell
- -(id)initWithReuseIdentifier:(NSString*)reuseIdentifier{
- self = [super initWithStyle:UITableViewCellStyleDefault reuseIdentifier:reuseIdentifier];
- if (self) {
- [self initLayuot];
- }
- return self;
- }
- //初始化控件
- -(void)initLayuot{
- _name = [[UILabel alloc] initWithFrame:CGRectMake(71, 5, 250, 40)];
- [self addSubview:_name];
- _userImage = [[UIImageView alloc] initWithFrame:CGRectMake(5, 5, 66, 66)];
- [self addSubview:_userImage];
- _introduction = [[UILabel alloc] initWithFrame:CGRectMake(5, 78, 250, 40)];
- [self addSubview:_introduction];
- }
- //赋值 and 自动换行,计算出cell的高度
- -(void)setIntroductionText:(NSString*)text{
- //获得当前cell高度
- CGRect frame = [self frame];
- //文本赋值
- self.introduction.text = text;
- //设置label的最大行数
- self.introduction.numberOfLines = 10;
- CGSize size = CGSizeMake(300, 1000);
- CGSize labelSize = [self.introduction.text sizeWithFont:self.introduction.font constrainedToSize:size lineBreakMode:NSLineBreakByClipping];
- self.introduction.frame = CGRectMake(self.introduction.frame.origin.x, self.introduction.frame.origin.y, labelSize.width, labelSize.height);
- //计算出自适应的高度
- frame.size.height = labelSize.height+100;
- self.frame = frame;
- }
- - (void)setSelected:(BOOL)selected animated:(BOOL)animated
- {
- [super setSelected:selected animated:animated];
- }
- @end
5、现在需要一个存放数据对象的模型类,创建一个UserModel用来封装数据
- #import <Foundation/Foundation.h>
- @interface UserModel : NSObject
- //用户名
- @property (nonatomic,copy) NSString *username;
- //介绍
- @property (nonatomic,copy) NSString *introduction;
- //头像图片路径
- @property (nonatomic,copy) NSString *imagePath;
- @end
6、现在需要一些数据,在TableViewController.m文件中实现数据的创建:
- //我需要一点测试数据,直接复制老项目东西
- -(void)createUserData{
- UserModel *user = [[UserModel alloc] init];
- [user setUsername:@"胖虎"];
- [user setIntroduction:@"我是胖虎我怕谁!!我是胖虎我怕谁!!我是胖虎我怕谁!!"];
- [user setImagePath:@"panghu.jpg"];
- UserModel *user2 = [[UserModel alloc] init];
- [user2 setUsername:@"多啦A梦"];
- [user2 setIntroduction:@"我是多啦A梦我有肚子!!我是多啦A梦我有肚子!!我是多啦A梦我有肚子!!我是多啦A梦我有肚子!!我是多啦A梦我有肚子!!我是多啦A梦我有肚子!!我是多啦A梦我有肚子!!我是多啦A梦我有肚子!!"];
- [user2 setImagePath:@"duolaameng.jpg"];
- UserModel *user3 = [[UserModel alloc] init];
- [user3 setUsername:@"大雄"];
- [user3 setIntroduction:@"我是大雄我谁都怕,我是大雄我谁都怕,我是大雄我谁都怕,我是大雄我谁都怕,我是大雄我谁都怕,我是大雄我谁都怕,"];
- [user3 setImagePath:@"daxiong.jpg"];
- [tableData addObject:user];
- [tableData addObject:user2];
- [tableData addObject:user3];
- }
还需要在viewDidLoad中调用上面这个方法来创建数据
- - (void)viewDidLoad
- {
- [super viewDidLoad];
- [self initTableView];
- [self createUserData];
- }
7、实现TableView的
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
方法为cell赋值
- -(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
- return 1;
- }
- -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
- return [tableData count];
- }
- - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
- {
- //指定cellIdentifier为自定义的cell
- static NSString *CellIdentifier = @"Cell";
- //自定义cell类
- TableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
- if (cell == nil) {
- cell = [[TableViewCell alloc] initWithReuseIdentifier:CellIdentifier];
- }
- UserModel *user = [tableData objectAtIndex:indexPath.row];
- cell.name.text = user.username;
- [cell.userImage setImage:[UIImage imageNamed:user.imagePath]];
- [cell setIntroductionText:user.introduction];
- return cell;
- }
8、最后需要将cell的高度返回给
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath方法:
- -(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
- TableViewCell *cell = [self tableView:_tableView cellForRowAtIndexPath:indexPath];
- return cell.frame.size.height;
- }
这样TableViewController.m中得所有代码:
- //
- // TableViewController.m
- // AdaptiveCell
- //
- // Created by swinglife on 14-1-10.
- // Copyright (c) 2014年 swinglife. All rights reserved.
- //
- #import "TableViewController.h"
- #import "UserModel.h"
- #import "TableViewCell.h"
- @interface TableViewController (){
- NSMutableArray *tableData; //tableView数据存放数组
- }
- @end
- @implementation TableViewController
- - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
- {
- self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
- if (self) {
- tableData = [[NSMutableArray alloc] init];
- }
- return self;
- }
- - (void)viewDidLoad
- {
- [super viewDidLoad];
- [self initTableView];
- [self createUserData];
- }
- //初始化tableView;
- -(void)initTableView{
- CGRect frame = self.view.frame;
- _tableView = [[UITableView alloc] initWithFrame:CGRectMake(frame.origin.x, frame.origin.y, frame.size.width, frame.size.height)];
- //代理类
- _tableView.delegate = self;
- //数据源
- _tableView.dataSource = self;
- [self.view addSubview:_tableView];
- }
- //我需要一点测试数据,直接复制老项目东西
- -(void)createUserData{
- UserModel *user = [[UserModel alloc] init];
- [user setUsername:@"胖虎"];
- [user setIntroduction:@"我是胖虎我怕谁!!我是胖虎我怕谁!!我是胖虎我怕谁!!"];
- [user setImagePath:@"panghu.jpg"];
- UserModel *user2 = [[UserModel alloc] init];
- [user2 setUsername:@"多啦A梦"];
- [user2 setIntroduction:@"我是多啦A梦我有肚子!!我是多啦A梦我有肚子!!我是多啦A梦我有肚子!!我是多啦A梦我有肚子!!我是多啦A梦我有肚子!!我是多啦A梦我有肚子!!我是多啦A梦我有肚子!!我是多啦A梦我有肚子!!"];
- [user2 setImagePath:@"duolaameng.jpg"];
- UserModel *user3 = [[UserModel alloc] init];
- [user3 setUsername:@"大雄"];
- [user3 setIntroduction:@"我是大雄我谁都怕,我是大雄我谁都怕,我是大雄我谁都怕,我是大雄我谁都怕,我是大雄我谁都怕,我是大雄我谁都怕,"];
- [user3 setImagePath:@"daxiong.jpg"];
- [tableData addObject:user];
- [tableData addObject:user2];
- [tableData addObject:user3];
- }
- -(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
- TableViewCell *cell = [self tableView:_tableView cellForRowAtIndexPath:indexPath];
- return cell.frame.size.height;
- }
- -(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
- return 1;
- }
- -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
- return [tableData count];
- }
- - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
- {
- //指定cellIdentifier为自定义的cell
- static NSString *CellIdentifier = @"Cell";
- //自定义cell类
- TableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
- if (cell == nil) {
- cell = [[TableViewCell alloc] initWithReuseIdentifier:CellIdentifier];
- }
- UserModel *user = [tableData objectAtIndex:indexPath.row];
- cell.name.text = user.username;
- [cell.userImage setImage:[UIImage imageNamed:user.imagePath]];
- [cell setIntroductionText:user.introduction];
- return cell;
- }
- - (void)didReceiveMemoryWarning
- {
- [super didReceiveMemoryWarning];
- }
- @end
总结:这种方式是通过计算出UILabel自动换行后的高度后,通过-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 方法将高度返回给TableView然后构建cell的高度。
最后的运行效果:
转载于:https://www.cnblogs.com/yuqingzhude/p/4844898.html
IOS TableView的Cell高度自适应,UILabel自动换行适应相关推荐
- barbuttonitem 文字换行_IOS TableView的Cell高度自适应,UILabel自动换行适应
ios tableView那些事 (八) tableview的插入移动.self.tableview.editinganimated:YES];- (BOOL)tableView:(UITableVi ...
- (0072)iOS开发之UITableViewCell高度自适应探索--cell预估高度
转载自:http://www.jianshu.com/p/f3609cd9392e 有了预估高度这个先决条件,一切都好说了.我们直接从代码入手. 接下来我们实现一个简单的信息展示功能,如: Demo最 ...
- SDAutoLayout快速实现Cell的高度自适应
我们经常会遇到需要cell高度自适应的情况 SDAutoLayout可以帮助你快速的实现这个功能 第一步 cell里面自定义 在这里只显示 姓名 电话 地址 三个控件 -(id)initWithSty ...
- iOS UILable高度自适应
适用于iOS6以后 NSString *tip = @"UILable高度自适应,UILable高度自适应,UILable高度自适应";UILabel label_2 = [[UI ...
- 简单的TableViewCell高度自适应(只有Label,仅当参考思路)
在iOS开发中或多或少的都会碰到TableViewCell高度自适应,那么今天这篇文章就简单的介绍一下如何给tableViewCell自适应高度 #ViewController copy @inter ...
- ios html高度自适应,iOS UILabel高度自适应终结篇
释放双眼,带上耳机,听听看~! 网上大部分的boundingRectWithSize和sizeWithFont 计算出来的宽高在某些有特殊情况下(如链接中有n等等)计算出来的还是有偏差不准,此时用NS ...
- IOS开发—IOS7.0以后UILabel高度自适应设置
IOS7.0以后UILabel高度自适应 IOS7.0以后,UILabel自适应高度的方法发生了改进,以下根据代码展示如何对一个label做自适应文本高度的操作. 代码示例: UILabel *lab ...
- 让tableView的高度等于contentSize的高度、动态调整tableView的高度、tableView的高度自适应布局...
文章概要: 1.简介下,tableView中的内容如何高度自适应的布局 2.如何做到让tableView的高度动态调整 还是看图作文吧- 首先,tableView的高度就是用户能够看见里面更大世界的那 ...
- UI一揽子计划 11 (自定义UITableViewCell、Cell 的自适应高度)
一. 自定义UITableViewCell 在日常的编程中,系统提供的几种Cell 样式 往往不能满足我们的需求.所以需要我们给它进行自定义样式. 自定义Cell 就是创建一个UITableViewC ...
最新文章
- linux c 错误 'for' loop initial declaration used outside C99 mode
- Codeforces 468C/469E 易错点
- POJ 3518 Prime Gap(素数题)
- Presto内存管理源码分析
- linux 脚本返回值
- poj 3032 模拟
- TextView的一些高级应用(自定义字体、显示多种颜色、添加阴影)
- PreferenceScreen使用
- iOS 开发中的各种证书简要说明
- mysql hugepage_huge page 能给MySQL 带来性能提升吗?
- win10启用smb3多通道_关于win10无法使用smb访问局域网内的计算机
- 王禹偁:万壑有声含晚籁,数峰无语立斜阳
- 【UE4】获取13位时间戳
- 1.5 极限的存在准则和两个重要极限
- MVC与MVP的区别
- 数据库面试——锁的12连问,赶紧收藏!
- [附源码]计算机毕业设计Python的连锁药店销售管理系统(程序+源码+LW文档)
- 联想K29昭阳K29笔记本联想K49A在dos下刷入bios教程
- IDC FutureScape:2023年中国未来数字创新十大预测
- 开启sketchup超速云渲染模式,文末附彩蛋!