UIImageView 在具有不同高度的自定义 UITableViewCell 内自动调整大小

Posted

技术标签:

【中文标题】UIImageView 在具有不同高度的自定义 UITableViewCell 内自动调整大小【英文标题】:UIImageView auto resize inside a custom UITableViewCell with varying height 【发布时间】:2015-02-02 04:09:01 【问题描述】:

我在故事板中设置了一个自定义单元原型,不使用自动布局,我遇到了一个相当棘手的问题,我在单元内的 UIImageView 似乎遵守所有它自己的约束,当我希望它反映带有一点填充的单元格。

这是情节提要界面构建器中的设置,视图模式设置为“缩放填充”

这是我得到的结果,没有编辑图像的位置或缩放,看起来很像使用方面填充。

我已经尝试了各种选项,但到目前为止似乎没有一个对我有用,我能想到的唯一另一种方法是在创建单元格时自动调整大小并自己手动设置矩形有什么想法吗?

还有我设置单元格的代码

- (void)setCell:(NSDictionary*)messageData

    [_nameLabel setText:messageData[@"name"]];
    [_messageLabel setText:messageData[@"message"]];

    [_nameLabel sizeToFit];
    [_messageLabel sizeToFit];

    UIImage *image;
    if([messageData[@"direction"] boolValue])
    
        image= [[UIImage imageNamed:@"bubble_left"]resizableImageWithCapInsets:UIEdgeInsetsMake(18, 6, 6, 10) resizingMode:UIImageResizingModeStretch];
    
    else
    
        image= [[UIImage imageNamed:@"bubble_right"]resizableImageWithCapInsets:UIEdgeInsetsMake(18, 10, 6, 6) resizingMode:UIImageResizingModeStretch];
    

    [_bubbleImage setImage:image];

和协议方法

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

    CUIChatCellTableViewCell *cell = [_chatTableView dequeueReusableCellWithIdentifier:@"CustomCell" forIndexPath:indexPath];

    NSDictionary *messageData = _testDataArray[indexPath.row];

    [cell setCell:messageData];

    return cell;



- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath

    _customCell = [_chatTableView dequeueReusableCellWithIdentifier:@"CustomCell"];

    //configure cell
    NSDictionary *messageData = _testDataArray[indexPath.row];

    [_customCell setCell:messageData];

    //Get height of the cell
    CGFloat height = [_customCell.messageLabel frame].size.height+[_customCell.nameLabel frame].size.height+20;

    return height;

【问题讨论】:

【参考方案1】:

像这样设置自动调整大小的属性,你能从中得到帮助吗?

【讨论】:

【参考方案2】:

我无法让 AutoResizing 工作,我从头开始尝试另一个测试项目,它似乎工作,所以它一定是某些设置,无论哪种方式,我最终不得不根据每个单元格的内容手动设置高度无论如何,这是这样做的代码

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath

    _customCell = [tableView dequeueReusableCellWithIdentifier:@"CustomCell"];

    //configure cell
    CMessageInfo *messageData = _testDataArray[indexPath.row];

    [_customCell setCell:messageData];

    //Get height of the cell
    CGFloat height = [_customCell.messageLabel frame].size.height+[_customCell.nameLabel frame].size.height+20;

    return height;

【讨论】:

以上是关于UIImageView 在具有不同高度的自定义 UITableViewCell 内自动调整大小的主要内容,如果未能解决你的问题,请参考以下文章

在自定义UITableViewCell中保持UIImageView的宽高比

设置高度:具有不同大小的自定义 Nib 的 TableViewCells

我想在单个表格视图中使用来自 nib 的两个不同的自定义单元格。两个原型电池具有不同的高度

iOS >> UITableView 与 2 个不同的自定义 UITableViewCells 具有不同的高度

在具有动态高度的 IB uitableviewcell 中使用带有 XIB 的自定义视图

UI NavBar高度的自定义(不同视图需要不同高度的nav bar)