1

各テーブル セルに左インデント (メッセージ スレッド/返信を考えてください) があり、動的な高さ (返信の内容) のラベルも含まれているテーブル ビューを読み込んでいます。私は AutoLayout を使用しているので、UILabelサイズ自体。それぞれのインデントを実装するために、私UITableViewCellは SO のここにいる人々のアドバイスに従って、私のものをオーバーライドlayoutSubviewsしたUITableViewCellので、次のようになりました。

- (void)layoutSubviews
{
    [super layoutSubviews];

    float indentPoints = self.indentationLevel * self.indentationWidth;

    self.contentView.frame = CGRectMake(indentPoints,
        self.contentView.frame.origin.y,
        self.contentView.frame.size.width - indentPoints,
        self.contentView.frame.size.height);
}

ただし、現在起こっていることは、UILabel テキストが下部で切り取られることがあります。UILabel は、適切な高さを計算し、インデントのある新しいフレーム サイズではなく (動的であるため) 描画するときに、古いフレーム サイズを使用しているように思えます。インデントを使用すると、同じテキストに使用できる幅が少なくなります。そのため、背が高くなる必要があることを認識している必要があります。

このインデントを削除してオーバーライドをコメントアウトするlayoutSubviewsか、呼び出しを[super layoutSubviews]最初ではなく最後に配置すると、テキストは途切れなくなりますが、インデントは失われます。

私が望むのは、UITableViewCell適切にインデントされ、動的 UILabel が新しいフレーム サイズを認識し、カットオフなしで描画することです。layoutIfNeededいろいろなところに電話をかけてみましたが、うまくいきませんUILabelでした。

4

2 に答える 2

0

この問題には、次のスタック オーバーフローの投稿と同じ根本原因があることが判明しました: UILabel がテキストを正しくラップしない場合がある (自動レイアウト)

この問題に対する受け入れられた解決策(layoutSubViewsでpreferredMaxLayoutWidthを設定する)を使用すると、この問題が解決されました。

于 2013-10-28T07:06:49.647 に答える
0

以下を使用して、事前に UILabel のサイズを計算する必要があります。

CGSize size = [str sizeWithFont:label.font constrainedToSize:CGSizeMake(label.bounds.size.width, CGFLOAT_MAX) lineBreakMode:NSLineBreakByWordWrapping];

セルのサイズを変更するために使用します。tableview データソースでこれを行う方が良い場合があります heightForRowAtIndexPath

于 2013-10-28T03:00:35.320 に答える