生活随笔
收集整理的这篇文章主要介绍了
IOS TableView的Cell高度自适应,UILabel自动换行适应
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
需求:
1、表格里的UILable要求自动换行
2、创建的tableViewCell的高度会自动适应内容的高度
一、用xcode构建项目,创建一个有tableView的视图,用纯代码的形式实现:
1、创建一个UIViewController类,定义一个UITableView,实现TableView的委托和数据源协议
[objc] view plaincopyprint?
#import <UIKit/UIKit.h> @interface TableViewController : UIViewController<UITableViewDataSource,UITableViewDelegate>{ } @property (nonatomic,retain) UITableView *tableView; @end 2、实现UITableView对象的初始化,声明一个tableData的数组对象用来保存tableView中得数据
[objc] view plaincopyprint?
#import "TableViewController.h" @interface TableViewController (){ NSMutableArray *tableData; } @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]; } -(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类,声明需要用到的控件对象和方法:
[objc] view plaincopyprint?
#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; -(id)initWithReuseIdentifier:(NSString*)reuseIdentifier; @end 4、初始化Cell的用户控件,实现方法:
[objc] view plaincopyprint?
#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]; } -(void)setIntroductionText:(NSString*)text{ CGRect frame = [self frame]; self.introduction.text = text; 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用来封装数据
[objc] view plaincopyprint?
#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文件中实现数据的创建:
[objc] view plaincopyprint?
-(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中调用上面这个方法来创建数据
[objc] view plaincopyprint?
- (void)viewDidLoad { [super viewDidLoad]; [self initTableView]; [self createUserData]; }
7、实现TableView的 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
方法为cell赋值
[objc] view plaincopyprint?
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{ return 1; } -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ return [tableData count]; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"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方法:
[objc] view plaincopyprint?
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{ TableViewCell *cell = [self tableView:_tableView cellForRowAtIndexPath:indexPath]; return cell.frame.size.height; } 这样TableViewController.m中得所有代码:
[objc] view plaincopyprint?
#import "TableViewController.h" #import "UserModel.h" #import "TableViewCell.h" @interface TableViewController (){ NSMutableArray *tableData; } @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]; } -(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 { static NSString *CellIdentifier = @"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自动换行适应的全部内容,希望文章能够帮你解决所遇到的问题。
如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。