0

我的应用程序中有一个聊天系统,我试图根据单元格中的文本量使动态单元格具有动态高度,这是人们尝试做的很常见的事情,但是我无法让我的工作正常。

消息也向右对齐,发件人应该在左边,接收者应该在右边……这就是我对故事板所做的事情。

创建了一个 TableView 2 dynamic prototypes,里面UIViewController是 viewController ......每个单元格都有一个标签,一个左一个右,整个左右工作......这是我的问题。它只是拉向所有人的权利,所以基本上我没有if发生,我else正在推翻。这是一个SS。

所以我有两个问题......文本不会有多行......以及不会做动态高度,也......如果有人能指出我让发送者和接收者显示在不同方面的正确方向。

在此处输入图像描述

- (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;
}
4

1 回答 1

2

左右问题可能是由于这个:

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

如果 myWords[1] 是字符串,则需要使用 isEqualToString: 而不是 "==" 进行比较。

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

至于标签高度没有正确调整,如果不知道标签是如何设置的,就很难知道发生了什么。我通常通过在标签和 IB 中单元格的顶部和底部之间进行约束来做到这一点。这样,当您更改单元格的高度时,标签将跟随(当然,将 numberOfLines 设置为 0)。此外,在您的 sizeWithFont:constrainedToSize: 方法中,您传递给 CGSizeMake() 的宽度应该是标签的宽度,而不是 1000。

于 2013-05-08T18:35:09.150 回答