1.主要针对的布局方式是约束布局 可以是xib 也可以是masonry
2.系统要求iOS8及以上版本
3.注意:如果出现高度计算不对,可能是约束设置不对,解决办法重新设置约束
4.实现思路:第一步是设置预设高度 第二步自动计算高度 第三步高度缓存
5.附源码
主要代码:
self.tableView.rowHeight = UITableViewAutomaticDimension;
self.tableView.estimatedRowHeight = 100;
次要代码:
\#import "ListViewController.h"
\#import "ListTableViewCell.h"
static NSString * const ReuseIdentifier = @"cell";
@interface ListViewController ()
@property (weak, nonatomic) IBOutlet UITableView *tableView;
@property (nonatomic, strong) NSMutableArray *dataArray;
@end
@implementation ListViewController
-(void)viewDidLoad
{
[super viewDidLoad];
self.navigationItem.title = @"标题";
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"reloaData" style:UIBarButtonItemStylePlain target:self action:@selector(rightBarButtonItemDidClick:)];
[self.tableView registerNib:[UINib nibWithNibName:NSStringFromClass([ListTableViewCell class]) bundle:nil] forCellReuseIdentifier:ReuseIdentifier];
}
#pragma mark - UITableViewDelegate
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return self.dataArray.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
ListTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ReuseIdentifier forIndexPath:indexPath];
cell.model = self.dataArray[indexPath.row];
return cell;
}
#pragma mark - Methods
- (void)rightBarButtonItemDidClick:(UIBarButtonItem *)item {
[self.tableView reloadData];
}
#pragma mark - Getters
-(NSMutableArray *)dataArray {
if (!_dataArray) {
_dataArray = [NSMutableArray array];
NSString *string = @"Siri 让你能够利用语音来完成发送信息、安排会议、查看最新比分等更多事务。只要说出你想做的事,Siri 就能帮你办到。Siri 可以听懂你说的话、知晓你的心意,甚至还能有所回应。iOS 7 中的 Siri 拥有新外观、新声音和新功能。它的界面经过重新设计,以淡入视图浮现于任意屏幕画面的最上层。Siri 回答问题的速度更快,还能查询更多信息源,如维基百科。它可以承担更多任务,如回电话、播放语音邮件、调节屏幕亮度,以及更多。";
//生成假数据
for (int i = 0; i < 100; i++) {
ListModel *model = [[ListModel alloc] init];
NSInteger index = (arc4random()%(string.length / 20)) * 20;
model.desc = [string substringToIndex:MAX(20, index)];
[_dataArray addObject:model];
}
}
return _dataArray;
}
@end
// 缓存用全局字典存
#pragma mark - UITableViewDelegate
-(CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath {
NSNumber *height = [self.heightAtIndexPath objectForKey:indexPath];
if(height){
return height.floatValue;
}
else {
return 100;
}
}
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
NSNumber *height = @(cell.frame.size.height);
[self.heightAtIndexPath setObject:height forKey:indexPath];
}
网友评论