1. 程式人生 > >iOS 設定tableview動態高度

iOS 設定tableview動態高度

使用UITableViewCell時,有時候每個cell中的高度可能不是一樣高,所以需要動態的設定cell的高度。我們可以在tableviewcell中寫一個類方法,計算內容的高度,然後在heightForRowAtIndexPath中呼叫此靜態方法,獲取對應cell的高度。

#import "ViewController.h"
#import "CustomViewCell.h"

@interface ViewController ()
{
    NSArray *arrData;
}

@end


@implementation ViewController

- (void
)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. _tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 20, self.view.frame.size.width, self.view.frame.size.height)]; _tableView.delegate = self; _tableView.dataSource
= self; [self.view addSubview:_tableView]; arrData = @[@{@"content":@"測試測試測試測試測試測試測試測試測試測試測試測試測試測試測試測試測試測試測試測試測試測試測試測試測試測試測試測試測試測試測試測試。"}, @{@"content":@"123測試123測試123測試123測試123測試123測試123測試123測試123測試123測試123測試123測試123測試123測試123測試123測試123測試。"}]; } #pragma mark - UITableViewDelegate
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return 1; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return arrData.count; } - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { return [CustomViewCell cellHeightWithInfo:[arrData objectAtIndex:indexPath.row]]; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *cellIdentifier = @"identifier"; CustomViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; if (cell == nil) { cell = [[CustomViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier]; } [cell setDictInfo:[arrData objectAtIndex:indexPath.row]]; NSLog(@"%ld",indexPath.row); return cell; } @end

cell中的方法如下:

#import "CustomViewCell.h"

@implementation CustomViewCell

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
        _content = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 0, 0)];
        _content.font = [UIFont systemFontOfSize:15.0];
        _content.numberOfLines = 0;
        [self addSubview:_content];
    }
    return self;
}

- (void)setDictInfo:(NSDictionary *)dictInfo
{
    CGFloat h = [CustomViewCell cellHeightWithInfo:dictInfo];
    _content.frame = CGRectMake(0, 0, 320, h);
    _content.text = [dictInfo objectForKey:@"content"];

    NSLog(@"%f",h);
}

+ (CGFloat)cellHeightWithInfo:(NSDictionary *)dictInfo
{
    NSString *contents = [dictInfo objectForKey:@"content"];

    CGRect rect = [contents boundingRectWithSize:CGSizeMake(320, MAXFLOAT)
                                         options:NSStringDrawingTruncatesLastVisibleLine | NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading
                                      attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:15.0f]} context:nil];
    return rect.size.height;
}
@end