2015-07-28 3 views
1

Я пытаюсь сделать чат-приложение. Я заполняю пузырьки чата от nib.UITableViewCell: ячейка сжимается при повторном вызове данных

Но всякий раз, когда я добавляю новое сообщение в массив и вызывается метод reloadData, ячейки над ним сжимаются.

Вот мой код для UITableView cellForRowAtIndexPath:

SentMessageTableViewCell *sentMessageCell; 
    sentMessageCell = [tableView dequeueReusableCellWithIdentifier:@"SentChatMessage"]; 

    if(sentMessageCell == nil) 
    { 
     NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"SentChatMessage" owner:self options:nil]; 
     sentMessageCell = [topLevelObjects objectAtIndex:0]; 
    } 
    sentMessageCell.message = message.body; 
    [sentMessageCell initWithMessage:message.body andDateTimeStamp:sendDateTimeStamp]; 
    return sentMessageCell; 

Это код heightForRowAtIndexPath

CGRect expectedLabelSize = [messageBody boundingRectWithSize:CGSizeMake(200, CGFLOAT_MAX) options:NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName:[UIFont fontWithName:@"Helvetica" size:13]} context:nil]; 

if(expectedLabelSize.size.height > 15) 
    return expectedLabelSize.size.height + 55; 
else 
    return 65; 

Также здесь код для реализации XIb SentMessageTableViewCell:

- (void)awakeFromNib { 
    // Initialization code 
} 

- (void) layoutSubviews{ 
    [super layoutSubviews]; 

    CGRect expectedLabelSize = [self.message boundingRectWithSize:CGSizeMake(200, CGFLOAT_MAX) options:NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName:[UIFont fontWithName:@"Helvetica" size:13]} context:nil]; 

    if(expectedLabelSize.size.height > 15) 
    { 
     [LabelMessage setFrame:CGRectMake(50, 30, 200, expectedLabelSize.size.height + 15)]; 
     [ImageViewChatBox setFrame:CGRectMake(40, 10, 220, expectedLabelSize.size.height + 45)]; 
    } 

    [LabelMessage setText:self.message]; 
    [LabelDateTimeStamp setText:self.dateTimeStamp]; 
} 

- (void)setSelected:(BOOL)selected animated:(BOOL)animated { 
    [super setSelected:selected animated:animated]; 
    // Configure the view for the selected state 
} 

- (void) initWithMessage:(NSString *)message andDateTimeStamp:(NSString *)dateTimeStamp{ 
    self.message = message; 
    self.dateTimeStamp = dateTimeStamp; 
} 

Но при запуске приложения результат выглядит примерно так.

enter image description here

ячейка выше сжимается размер по умолчанию.

EDIT: Вот мой xib.

enter image description here

Заранее спасибо за помощь.

+0

Пожалуйста, отправьте код для метода heightForRowAtIndexPath:. – ZeMoon

+0

NSLog номера в методе, что он фактически возвращает. Я бы не стал полагаться на 'expectedLabelSize', который может быть сокращен после reloadTableView() – Michal

+0

@ZeMoon Я использовал метод heightForRowAtIndexPath для установки высоты. Как вы можете видеть, высота остается неизменной, только содержимое внутри ячейки сжимается. – user2007547

ответ

1

Оригинал Комментарий: Могли бы вы добавить некоторые ограничения для внутренних элементов и попробовать?

Отсутствует ограничение на файл xib. iOS требует правильных ограничений для адаптации внутренних элементов после кадра (изменение высоты в этом случае) изменяется.

2

Вы должны изменить ваш метод layoutSubviews

- (void) layoutSubviews{ 
    [super layoutSubviews]; 

    CGRect expectedLabelSize = [self.message boundingRectWithSize:CGSizeMake(200, CGFLOAT_MAX) options:NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName:[UIFont fontWithName:@"Helvetica" size:13]} context:nil]; 

    if(expectedLabelSize.size.height > 15) 
    { 
     [LabelMessage setFrame:CGRectMake(50, 30, 200, expectedLabelSize.size.height + 15)]; 
     [ImageViewChatBox setFrame:CGRectMake(40, 10, 220, expectedLabelSize.size.height + 45)]; 
    } else { 

      // Need to set frame for normal height messages 
    } 

    [LabelMessage setText:self.message]; 
    [LabelDateTimeStamp setText:self.dateTimeStamp]; 
} 
+0

безупречный ответ !!!!! – iAnurag

+0

@Ashish P: Я добавил файл xib. Не установлен ли размер по умолчанию в интерфейсе Builder? – user2007547

Смежные вопросы