IOS TableView的Cell高度自适应,UILabel自动换行适应

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;@end2、实现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;@end4、初始化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];}@end5、现在需要一个存放数据对象的模型类,创建一个UserModel用来封装数据

#import <Foundation/Foundation.h>@interface UserModel : NSObject//用户名@property (nonatomic,copy) NSString *username;//介绍@property (nonatomic,copy) NSString *introduction;//头像图片路径@property (nonatomic,copy) NSString *imagePath;@end6、现在需要一些数据,在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赋值

人生就是要感受美丽的善良的,丑恶的病态的。

IOS TableView的Cell高度自适应,UILabel自动换行适应

相关文章:

你感兴趣的文章:

标签云: