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

UIImageView auto resize inside a custom UITableViewCell with varying height

我已经在不使用自动布局的故事板中设置了一个自定义单元格原型,我 运行 遇到了一个相当令人烦恼的问题,我在单元格中拥有的 UIImageView 似乎在我需要时遵守它自己的所有约束它通过一些填充来反映单元格的大小。

这是故事板界面构建器中的设置,视图模式设置为 "scale to fill"

这是我得到的结果,没有对图像的位置或缩放进行编辑,看起来非常像使用纵横比填充。

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

和我设置单元格的代码

- (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;
}

这样设置自动调整大小的属性,希望对您有所帮助。

我无法让 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;
}