在我的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
在运行时看起来像这样(选中单元格以便您可以看到框架):
请注意,我可以在bubbleImageView
子类中设置UITableViewCell
的帧,但我不知道该单元格的高度是多少。我更加困惑的是,我可以设置messageTextLabel
的框架,而不是我的bubbleImageViews。我可能正在做一些非常基本的错误,这是一个简单的问题,虽然由于某些原因我被绊倒了。
谢谢!
答案 0 :(得分:1)
我在这里看到了两个问题:
contentMode
设置为UIViewContentModeScaleToFill
(这是默认设置,但无论如何最好定义此类属性)。_bubbleImageView.contentMode = UIViewContentModeScaleToFill;
。我认为这里的解决方案是自动布局 - 正确设置约束将解决这个问题 我建议在故事板中使用表视图控制器和动态单元格进行...