1.主要針對的布局方式是約束布局 可以是xib 也可以是masonry
2.系統(tǒng)要求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 讓你能夠利用語音來完成發(fā)送信息旋恼、安排會議、查看最新比分等更多事務斯撮。只要說出你想做的事台妆,Siri 就能幫你辦到。Siri 可以聽懂你說的話拘荡、知曉你的心意臼节,甚至還能有所回應。iOS 7 中的 Siri 擁有新外觀珊皿、新聲音和新功能网缝。它的界面經過重新設計,以淡入視圖浮現于任意屏幕畫面的最上層蟋定。Siri 回答問題的速度更快粉臊,還能查詢更多信息源,如維基百科驶兜。它可以承擔更多任務扼仲,如回電話、播放語音郵件抄淑、調節(jié)屏幕亮度屠凶,以及更多。";
//生成假數據
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];
}