0

私のアプリにはチャットシステムがあり、セル内のテキストの量に応じて動的なセルを動的な高さにしようとしています。

また、メッセージは右に配置され、送信者は左側に、受信者は右側にあるはずです...ストーリーボードで行ったことは次のとおりです。

でTableViewを作成し2 dynamic prototypesUIViewControllerここの中にそのためのviewControllerがあります...各セルにはラベルがあり、左右に1つずつ、左右全体が機能します...ここに私の問題があります。それはすべての人にとって右に引っ張るだけなので、基本的に私ifは起こっておらず、私elseは却下されています。こちらSSです。

だから私には2つの問題があります...テキストに複数の行がありません...動的な高さもありません...誰かが私に送信者と受信者を異なる側に表示させるための正しい方向を教えてくれれば。

ここに画像の説明を入力

- (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 に答える