Implementing dynamic UITableViewCell height on UITableView

转载 2013年12月03日 20:19:08

1.封装
cell的方法
- (CGFloat)requiredHeight
{
    if(isFull)
    {
        CGSize labelSize = [LblTitle.text sizeWithFont: [LblContent font]
                                     constrainedToSize: CGSizeMake(300.0f, 300.0f) 
                                         lineBreakMode: UILineBreakModeTailTruncation];
        return 42.0f + labelSize.height;
    }
    else
    {
        return 60.0f;
    }
}

In owner file (UITableViewDelegate):

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    OOCommentCell *cell = (OOCommentCell*)[self tableView:tableView cellForRowAtIndexPath:indexPath];
    return [cell requiredHeight];
}

2.没有封装

Implementing dynamic UITableViewCell height on UITableView

If you’ve used Twitter iOS application, then most probably you will notice that content streams differ in sizes based on the length of each tweets. And if we are implementing such as this in simplest way of doing this, we could be using UITableView’s heightForRowAtIndexPath delegate method and get/set the size of each string on the array:

For demonstrating this behavior, we’ll be creating a simple View based project that needs an NSMutableArray and a UITableView:

@interface TableTestViewController : UIViewController<UITableViewDelegate, UITableViewDataSource> {
    NSMutableArray *_quotes;
    UITableView *_tableView;
}    
@end

And setting up our _tableView and adding some test data with varying length of characters:

- (void)viewDidLoad
{
    [super viewDidLoad];
    _quotes = [[NSMutableArray alloc] initWithObjects: 
               @"I do the very best I know how-the very best I can; and I mean to keep doing so until the end. If the end brings me out all right, what is said against me won't amount to anything. If the end brings me out wrong, ten angels swearing I was right would make no difference.", 
               @"Be systematically heroic in little unnecessary points, do every day or two something for no other reason than its difficulty, so that, when the hour of need draws nigh, it may find you not unnerved or untrained to stand the test.", 
               @"The trick of it, she told herself, is to be courageous and bold and make a difference. Not change the world exactly, just the bit around you. Go out there with your double-first, your passion and your new Smith Corona electric typewriter and work hard at ... something. Change lives through art maybe. Write beautifully. Cherish your friends, stay true to your principles, live passionately and fully well. Experience new things. Love and be loved if at all possible. Eat sensibly. Stuff like that.", 
               @"I know of no more encouraging fact than the unquestioned ability of a man to elevate his life by conscious endeavor.", nil];
    
    _tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, 320, 460) style:UITableViewStylePlain];
    _tableView.dataSource = self;
    _tableView.delegate = self;        

    [self.view addSubview: _tableView];
}

Our _tableView is set up to be the same UIWindow height less the size of Status bar (480 – 20). And setting the current view implements its delegate. Then, add our _tableView as a subview to our main view.

Let’s implement _tableView’s delegate and dataSource:

#pragma mark - UITableViewDataSource methods

- (NSInteger)tableView:(UITableView *)table numberOfRowsInSection:(NSInteger)section {
    return [_quotes count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    NSString* reuseIdentifier = @"Cell";
    UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:reuseIdentifier];
    
    if (nil == cell) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:reuseIdentifier] autorelease];
        cell.textLabel.font = [UIFont systemFontOfSize:14];
        cell.textLabel.numberOfLines = 0;
    }
    
    cell.textLabel.text = [_quotes objectAtIndex:indexPath.row];
    return cell;
}
@end

Code above is pretty standard code for Table-view based application. The interesting code to notice is thenumberOfLines = 0, this tells us that cell will contain a multi-line string with unknown size. If we forgot to set this property to 0, the default value of 1 will be in effect causing our text to display and truncated in a single line.

#pragma mark - UITableViewDelegate methods

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    CGSize size = [[_quotes objectAtIndex:indexPath.row] 
                   sizeWithFont:[UIFont systemFontOfSize:14] 
                   constrainedToSize:CGSizeMake(300, CGFLOAT_MAX)];
    return size.height + 10;
}

In order to achieve our dynamic height nature of our cells, heightForRowAtIndexPath will do the trick. So for each cell iteration, it also gets the size of the string including its font size to the count. The constrainedToSizeparameter is the maximum acceptable size of the string. We set the height to be the constant max value ofCGFLOAT but you can set it manually to a higher number, say 5000 or 9000. After we get the size of the current string on the cell, we added 10 more to the height for readability purpose.


相关文章推荐

代码实现 UITableView与UITableViewCell

  • 2012年07月07日 17:49
  • 105KB
  • 下载

UITableView与UITableViewCell

  • 2013年05月27日 10:25
  • 612KB
  • 下载

Implementing Address Windowing Extensions (AWE) or VLM on 32-bit Windows Platforms [ID 225349.1]

Applies to: Oracle Server - Enterprise Edition Microsoft Windows (32-bit) Purpose To address th...

IOS 自定义 tableView cell(UITableViewCell height) 高度

IOS开发中,最常用的就是UITableView 了,这里,我做一个简单的帖子列表Demo,教大家用一种比较模块化的方法来自定义我们的cell 高度,废话不多说,我们开始新建一个工程。PS:采用纯代码...

Strategies for Implementing POSIX Condition Variables on Win32

From:http://www.cs.wustl.edu/~schmidt/win32-cv-1.html Strategies for Implementing POSIX Conditi...

UITableView和UITableViewCell常用属性和方法

常用属性: 第一、分割线的颜色和style: @property(nonatomic) UITableViewCellSeparatorStyle separatorStyle;           ...

UITableView删除添加,移动,分区,索引,自定义UITableViewCell

UITableView // // ViewController.m // tabview // // Created by Young on 15/10/21. // Copyright ©...

UITableViewCell 作为"UITableView"观察者

TableViewCell作TableView的观察者 TableViewCell 观察者 挂掉 TableViewCell作观察者

结合android ,讲述iOS UITableView和UITableViewCell的用法

iOS UITableView和UITableViewCell的用法
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Implementing dynamic UITableViewCell height on UITableView
举报原因:
原因补充:

(最多只允许输入30个字)