Моя система чата выглядит немного странно, я не могу получить динамическую высоту для клетки
В моем приложении есть система чата, и я пытаюсь сделать так, чтобы динамические ячейки имели динамическую высоту в соответствии с количеством текста в ячейке, довольно часто люди пытаются это сделать, однако я не могу заставить мою работу работать должным образом.
Также сообщения располагаются справа, отправитель должен быть слева, а получатель - справа... вот что я сделал с раскадровкой.
создал 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.