首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动态更改原型单元的高度

动态更改原型单元的高度
EN

Stack Overflow用户
提问于 2013-03-10 10:29:47
回答 2查看 700关注 0票数 0

我正在尝试添加一些文本到我的标签中。当文本大于单元格的指定高度时。我希望细胞也能长得更高。我确实添加了以下代码来处理标签高度,但我不确定如何将其传播到我的单元格中。

代码

代码语言:javascript
复制
- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    self.navigationItem.title = @"Scribbles";
    //Array
    Scribble *scribble1 = [Scribble new];
    [scribble1 setTitle:@"Test 1" andBody:@"This is fun! This is fun! This is fun! This is fun! This is fun! This is fun! This is fun! This is fun! This is fun! This is fun! This is fun!" andImage:@"scribble.png"];
    Scribble *scribble2 = [Scribble new];
    [scribble2 setTitle:@"Test 2" andBody:@"This is fun!" andImage:@"scribble2.png"];
    Scribble *scribble3 = [Scribble new];
    [scribble3 setTitle:@"Test 3" andBody:@"This is fun!" andImage:@"scribble3.png"];
    Scribble *scribble4 = [Scribble new];
    [scribble4 setTitle:@"Test 4" andBody:@"This is fun!" andImage:@"scribble.png"];
    Scribble *scribble5 = [Scribble new];
    [scribble5 setTitle:@"Test 5" andBody:@"This is fun!" andImage:@"scribble2.png"];
    Scribble *scribble6 = [Scribble new];
    [scribble6 setTitle:@"Test 6" andBody:@"This is fun!" andImage:@"scribble3.png"];
    Scribble *scribble7 = [Scribble new];
    [scribble7 setTitle:@"Test 7" andBody:@"This is fun!" andImage:@"scribble.png"];
    Scribble *scribble8 = [Scribble new];
    [scribble8 setTitle:@"Test 8" andBody:@"This is fun!" andImage:@"scribble3.png"];

    scribbles = [NSArray arrayWithObjects:
                 scribble1,scribble2,scribble3,scribble4,scribble5,scribble6,scribble7,scribble8, nil];
}

//To make the Selection disappear
- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
    [self.tableView deselectRowAtIndexPath:[self.tableView indexPathForSelectedRow] animated:YES];

}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    // Return the number of sections.
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return scribbles.count;
}

//Loading stuff into tableView
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *simpleTableIdentifier = @"ScribbleCell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];

    if (cell == nil){
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier];
    }

    Scribble *scribble = [scribbles objectAtIndex:indexPath.row];

    UIImageView *scribbleImageView = (UIImageView *)[cell viewWithTag:100];
    scribbleImageView.image = [UIImage imageNamed:scribble.image];
    scribbleImageView.layer.cornerRadius = 18.0;
    scribbleImageView.clipsToBounds = YES;

    UILabel *scribbleNameLabel = (UILabel *)[cell viewWithTag:101];
    scribbleNameLabel.text = scribble.title;

    UILabel *scribbleBodyLabel = (UILabel *)[cell viewWithTag:102];
    [scribbleBodyLabel setLineBreakMode:NSLineBreakByWordWrapping];
    scribbleBodyLabel.numberOfLines = 0;
    scribbleBodyLabel.text = scribble.body;
    [scribbleBodyLabel sizeToFit];
    return cell;
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-10 13:34:15

如果您使用的是原型单元格,只要标识符正确,dequeueReusableCellWithIdentifier:每次都会返回一个单元格。

代码语言:javascript
复制
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *simpleTableIdentifier = @"ScribbleCell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];

    Scribble *scribble = scribble[indexPath.row];

    UIImageView *scribbleImageView = (UIImageView *)[cell viewWithTag:100];
    scribbleImageView.image = [UIImage imageNamed:scribble.image];
    scribbleImageView.layer.cornerRadius = 18.0;
    scribbleImageView.clipsToBounds = YES;

    UILabel *scribbleNameLabel = (UILabel *)[cell viewWithTag:101];
    scribbleNameLabel.text = scribble.title;

    UILabel *scribbleBodyLabel = (UILabel *)[cell viewWithTag:102];
    [scribbleBodyLabel setLineBreakMode:NSLineBreakByWordWrapping];
    scribbleBodyLabel.numberOfLines = 0;
    scribbleBodyLabel.text = scribble.body;
    return cell;
}

    - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        Scribble *scribble = scribble[indexPath.row];

        NSString *scribbleBody = scribble.body;
        UIFont *cellFont = [UIFont systemFontOfSize:17.0f];
        /*Instead of hardcoded width you can find width from tableView frame 
        imageView and their offsets 20 for tableView ,40 for imageView, 30 for 
        offset of body label  */
        CGFloat width = tableView.frame.size.width - 90.0f;
        CGSize constraintSize = CGSizeMake(width, MAXFLOAT);
        CGSize labelSize = [scribbleBody sizeWithFont:cellFont
                                    constrainedToSize:constraintSize
                                        lineBreakMode:NSLineBreakByWordWrapping];

        //Add the height of scribbleNameLabel +offset
        return labelSize.height + 40.0f;
    }
票数 1
EN

Stack Overflow用户

发布于 2013-03-10 10:42:45

你需要为UITableView使用委托方法heightForRowAtIndexPath,在这里你可以根据你可以follow the threadUITableViewCell的文本来调整高度,这将有助于你的情况

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15318235

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档