gpt4 book ai didi

ios - 无法在具有动态高度的子类 UITableViewCell 中调整 UIImageView 框架的大小

转载 作者:行者123 更新时间:2023-11-29 03:16:38 25 4
gpt4 key购买 nike

在我的 UITableView 中,所有单元格的高度都不同。它们都有一张背景图片,就是一张泡泡图片。单元格的所有 TextLabels 也需要不同的宽度,因此我将 UITableViewCell 子类化并赋予它两个属性:

@property (strong, nonatomic) UILabel* messageTextLabel;
@property (strong, nonatomic) UIImageView* bubbleImageView;

我的自定义 UITableViewCell 的 initWithStyle 设置如下:

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {

//stretchable bubble image
UIImage *rawBackground = [UIImage imageNamed:@"text_bubble"];
UIImage *background = [rawBackground stretchableImageWithLeftCapWidth:13 topCapHeight:22];
_bubbleImageView = [[UIImageView alloc] initWithImage:background];

//textlabel
_messageTextLabel = [[UILabel alloc] init];
[_messageTextLabel setFont:[UIFont systemFontOfSize:14.0f]];
[_messageTextLabel setNumberOfLines:0];
[_messageTextLabel setBackgroundColor:[UIColor clearColor]];
[_messageTextLabel setTextColor:[UIColor blackColor]];

[self.contentView addSubview:_bubbleImageView];
[self.contentView addSubview:_messageTextLabel];

}
return self;
}

在我的 TableView 的 cellForRowAtIndexPath 中,我已经尝试在其中分配一个 UIImageView 并将其设置为单元格的框架,这很有效,但是当我向上滚动时然后向下,屏幕因 UIImageViews 被一遍又一遍地重新分配而变得困惑。我已经尝试过 if(cell == nil) 技术,但这只会让我的整个 UITableView 变成空白。所以,这就是我现在拥有的:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
Cell *cell = (Cell*)[tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

//works just fine
[cell.messageTextLabel setFrame:CGRectMake(15, 0, 245, cell.frame.size.height -10)];

//this doesn't work at all
[cell.bubbleImageView setFrame:CGRectMake(10, 0, cell.frame.size.width, cell.frame.size.height)];

[cell.messageTextLabel setText:[self.randomData objectAtIndex:indexPath.item]];

return cell;
}

所以我的 UITableView 在运行时最终看起来像这样(选中单元格以便您可以看到框架):

请注意,我可以在我的 UITableViewCell 子类中设置 bubbleImageView 的框架,但我不知道那时单元格的高度是多少。我更困惑的是我可以设置我的 messageTextLabel 的框架而不是我的 bubbleImageViews。我可能会做一些非常基本的错误,这是一个简单的问题,但由于某种原因我被绊倒了。

谢谢!

最佳答案

我在这里看到了 2 个问题:

  • 我认为您启用了自动布局。
    在这种情况下,初始框架和 autoresizingMask 会自动转换为自动布局约束。
    在此之后,没有框架更改将更改 View 的大小和位置 - 只有约束......
  • 您还没有将 ImageView 的 contentMode 设置为 UIViewContentModeScaleToFill(这是默认设置,但最好定义此类属性)。
    只需添加这一行:_bubbleImageView.contentMode = UIViewContentModeScaleToFill; 就在它启动之后。

我认为这里的解决方案是自动布局 - 适当设置约束将解决这个问题。
我建议在 Storyboard 中使用 TableView Controller 和动态单元格...

关于ios - 无法在具有动态高度的子类 UITableViewCell 中调整 UIImageView 框架的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21612081/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com