Моя система чата выглядит немного странно, я не могу получить динамическую высоту для клетки

В моем приложении есть система чата, и я пытаюсь сделать так, чтобы динамические ячейки имели динамическую высоту в соответствии с количеством текста в ячейке, довольно часто люди пытаются это сделать, однако я не могу заставить мою работу работать должным образом.

Также сообщения располагаются справа, отправитель должен быть слева, а получатель - справа... вот что я сделал с раскадровкой.

создал TableView с 2 dynamic prototypesвнутри UIViewControllerвот viewController для этого... каждая ячейка имеет метку, одна слева одна справа, вся правая и левая вещь работает... вот моя проблема. Это только тянет вправо для всех, так что в основном мой if не происходит, и мой else отменяет. Вот СС.

Итак, у меня есть две проблемы... Текст не будет иметь несколько строк... наряду с не будет динамическая высота, а также... если кто-то может указать мне, я правильный путь для получения отправителя и получателя для отображения на разных сторонах.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSArray *myWords = [[getMessage objectAtIndex:indexPath.row] componentsSeparatedByString:@":oyr4:"];
    if (myWords[1] == [MyClass str]){
        static NSString *sender = @"sender";
        UITableViewCell* cellSender = [_tableView dequeueReusableCellWithIdentifier:sender];
        messageContentTo = (UILabel *)[cellSender viewWithTag:83];
        self->messageContentTo.backgroundColor = [UIColor colorWithWhite:1.0 alpha:0.8];
        self->messageContentTo.lineBreakMode = NSLineBreakByWordWrapping;
        [self->messageContentTo sizeToFit];
        messageContentTo.text = myWords[4];
        return cellSender;
    } else {

        static NSString *reciever = @"reciever";

        UITableViewCell* cellReciever = [_tableView dequeueReusableCellWithIdentifier:reciever];
        messageContentFrom = (UILabel *)[cellReciever viewWithTag:84];
        messageContentFrom.backgroundColor = [UIColor colorWithWhite:1.0 alpha:0.8];
        messageContentFrom.lineBreakMode = NSLineBreakByWordWrapping;
        messageContentFrom.font = [UIFont systemFontOfSize:22];
        messageContentFrom.numberOfLines = 0;
        messageContentFrom.text = myWords[4];

        return cellReciever;
    }

}
#pragma mark - UITableViewDelegate methods
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    CGSize size = [[getMessage objectAtIndex:indexPath.row]
                   sizeWithFont:[UIFont systemFontOfSize:22]
                   constrainedToSize:CGSizeMake(1000, CGFLOAT_MAX)];
    return size.height + 15;
}

1 ответ

Решение

Проблема слева направо может быть из-за этого:

if (myWords[1] == [MyClass str])

Если myWords[1] является строкой, вам нужно использовать isEqualToString: не "==" для сравнения.

if ([myWords[1] isEqualToString:[MyClass str]])

Поскольку высота этикетки не регулируется должным образом, трудно сказать, что происходит, не зная, как настроены ваши этикетки. Я обычно делаю это, устанавливая ограничения между меткой и верхом и низом ячейки в IB. Таким образом, когда вы изменяете высоту ячейки, будет следовать метка (и, конечно, установите для numberOfLines значение 0). Кроме того, в вашем методе sizeWithFont:constrainedToSize: ширина, передаваемая в CGSizeMake(), должна быть шириной метки, а не 1000.

Другие вопросы по тегам