Делаю что-то вроде чата. Мне надо рисовать красивые «облака» как в приложении Messages. Все бы ничего, но когда на экране появляются до этого невидимы ячейки, фон вылетает слева направо.
Сначала думал, что frame задается после добавления view, но оказалось что все ок.
Код таблицы:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
IKChatMessageData *data = [_messages objectAtIndex:indexPath.row];
IKChatMessageCell *cell = [[IKChatMessageCell alloc] init];
[cell setData:data];
return cell;
}
Код setData у IKChatMessageCell:
- (void)setData:(IKChatMessageData *)data
{
_data = data;
self.selectionStyle = UITableViewCellSelectionStyleNone;
IKChatMessageType type = _data.type;
CGFloat width = _data.view.frame.size.width;
CGFloat height = _data.view.frame.size.height;
CGFloat x = (type == MessageTypeOther) ? 0 : self.frame.size.width - width - self.data.insets.left - self.data.insets.right;
CGFloat y = 0;
if (!self.backgroundImage)
{
self.backgroundImage = [[UIImageView alloc] init];
}
if (type == MessageTypeOther)
{
self.backgroundImage.image = [[UIImage imageNamed:@"bubbleSomeone.png"] stretchableImageWithLeftCapWidth:21 topCapHeight:14];
}
else {
self.backgroundImage.image = [[UIImage imageNamed:@"bubbleMine.png"] stretchableImageWithLeftCapWidth:15 topCapHeight:14];
}
self.backgroundView.frame = CGRectMake(x, y, width + self.data.insets.left + self.data.insets.right, height + self.data.insets.top + self.data.insets.bottom);
_data.view.frame = CGRectMake(x + self.data.insets.left, y + self.data.insets.top, width, height);
[_data.view removeFromSuperview];
[self addSubview:self.backgroundImage];
[self addSubview:_data.view];
}
Это куски переписанного кода из UIBubbleTableView, там эта проблема тоже есть, но после переписывания, ничего не помогло.