1

動的テキスト コンテンツを含む UILabel がある場合は、UILabel を適切に調整する SizeToFit を使用する必要があると常に言われていました。sizeToFit を使用しましたが、スクロール後に UITableViewCell にあったテキスト ラベルが台無しになりました。ただし、最初の画面ロードでは問題なく表示されます。

数時間いじった後、他の誰かが同じ問題を抱えていて、SizeToFit の代わりに次の 2 行を使用したことをどこかで読みました。

 cell.message.lineBreakMode = UILineBreakModeWordWrap;
    cell.message.autoresizingMask = UIViewAutoresizingFlexibleHeight;

そしてそれはうまくいくでしょう。よくやったし、私の UILabels は完璧です。しかし、私はなぜそうなのかを理解することにまだ興味がありますか?

だから今私のコードは次のようになります:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"MessagesCustomViewCell";
    MessagesCustomViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"MessagesCustomViewCell_iPhone" owner:self options:nil];
        cell = [nib objectAtIndex:0];  //you can also loop thru or manually remember positions
    }

    NSArray * discussion = [self.messages objectAtIndex:indexPath.row];

      cell.author.text = [discussion valueForKeyPath:@"author.name"];
      cell.message.text = [discussion valueForKey:@"text"]; //DYNAMIC VARIABLE SIZED TEXT 


    cell.message.lineBreakMode = UILineBreakModeWordWrap;
    cell.message.autoresizingMask = UIViewAutoresizingFlexibleHeight;

    return cell;
}
4

1 に答える 1

4

フィットするサイズ

動作:スーパービューのサイズよりもコンテンツに注意する

sizeToFitせずに UILabel に送信すると、[yourLabel setNumberOfLines:0]テキストに合わせてラベルができるだけ広くなります。ラベルを使用すると[yourLabel setNumberOfLines:0]、幅に応じてテキストが複数の行に分割されますが、これにより、高さがテキストに収まるようにできるだけ大きくなりますが、スーパービューの境界は気にしません。

autoResizingMask

動作:スーパービューの内容よりもサイズを気にする

UIlabel の autoResizingMask が設定されている場合、スーパービューの境界が変更されると、最初にフレームが変更され、次に「rect にテキストを追加できますか?」がチェックされます。その相対的なプロパティ(numberOfLines、font、...)に基づいています。

于 2012-11-05T08:39:04.500 に答える