1

私の場合、含まUITableViewCellれる a の高さに合わせてa のサイズを変更するにはどうすればよいUITextViewですか?

私は現在、次のコードを使用してこれを達成しようとしています:

- (CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {

    // init the font that we use
    UIFont *font = [UIFont fontWithName:@"SourceSansPro-Regular" size:16];

    if (indexPath.section == 0) {

        // get the text size of the thread
        CGSize textSize = [_thread.text sizeWithFont:font constrainedToSize:CGSizeMake(280, CGFLOAT_MAX) lineBreakMode:UILineBreakModeWordWrap];

        return textSize.height + 20;

    }

    // default
    return 60;

}

UITableViewCellこのメソッドで にアクセスできれば、そのcontentSizeプロパティを使用UITextViewしてそれを返すことができると思います。しかし、実行フローのこの時点ではそれが可能だとは思いません。

get size 関数によって返されるテキスト サイズに合わせてスケーリングされないため、そのバッファーを微調整することはできません。テキストが短いほど、より大きなバッファ サイズがより明確になります。

これは の高さを調整していますが、内部がUITableViewCellすべて表示されているわけではありません。メソッドでのUITextView幅を指定しました。定数を使用して、必要なだけワードラップできるように、本質的に最大の高さを持たないようにしたいと指定しました。myの の上にユニット バッファーがあり、その下にもユニット バッファーが必要なため、メソッド呼び出しの結果の高さにユニットのバッファーを追加します。UITextViewsizeWithFont:constrainedToSize:lineBreakMode:280CGFLOAT_MAX2020UITextViewStoryboard20

ただし、これらすべての最終結果には、まだテキストが切り取られています。これが私が話していることの写真です:

切り取られたセルの内容

何か案は?

4

1 に答える 1

1

私は先に進み、私の質問に答えます。これに対する答えは、2 つのステップで得られます。

まず、メソッドUITextView内のロジック中のサイズを調整します。のテキストを変更したtableView:cellForRowAtIndexPath:は、必ずこれを行ってください。テキストビューのサブクラス内で、次のメソッドを使用してサイズを変更します。UITextViewUITextViewUITableViewCellself.text

- (void)resizeTextView {

    // get the current frame size
    CGRect frame = self.text.frame;

    // set it to the height of the text view
    frame.size.height = self.text.contentSize.height;

    // set the new size of the text view
    self.text.frame = frame;

}

次に、メソッドUITableViewCell内の高さを指定します。tableView:heightForRowAtIndexpath:この行の高さを取得するには、行に表示されるテキストの高さを計算する必要があるため、高さを計算する必要がある他のすべてのものと一緒に計算する必要があるため、これはほとんどの謎が存在する場所です。私のシナリオでは、それはUITextView. UITableViewCellこのメソッドでインスタンスにアクセスできない場合は、 のようなものを使用する必要がありますsizeWithFont:constrainedToSize:lineBreakMode:。しかし、これが一貫した高さを返していないことに気付きました。または、少なくとも、UITextView. しかし、それが問題でした。sizeWithFontテキストビューには、メソッドが使用するものとは異なる行の高さなどと同様に、追加の左右のパディングがあります。

したがって、sizeWithFontメソッドの結果をしばらくごまかした後、次のコードになりました。

- (CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {

    // init the font that we use
    UIFont *font = [UIFont fontWithName:@"SourceSansPro-Regular" size:16];

    if (indexPath.section == 0) {

        // get the text size of the thread
        CGSize textSize = [_thread.text sizeWithFont:font constrainedToSize:CGSizeMake(280 - 16, CGFLOAT_MAX) lineBreakMode:UILineBreakModeWordWrap];

        // text height + padding
        return textSize.height + 40;

    } else if (indexPath.section == 1) {

        // get the comment for this row
        Comment *comment = [_comments objectAtIndex:indexPath.row];

        // get the heights of the text areas
        CGSize textSize = [comment.text sizeWithFont:font constrainedToSize:CGSizeMake(280 - 16, CGFLOAT_MAX) lineBreakMode:UILineBreakModeWordWrap];

        return textSize.height + 40;

    }

    return 60;

}

UITextViewサイズ制約パラメーターでは、左右両側に約 8 単位のパディングがあるため、16 単位を減算します。これにより、テキストの高さについて予想したものにより近い結果が得られます。

また、40 単位の最終的な高さにパディングを追加します。これは、行自体がUITextView.

ほら!それが役立つことを願っています。

于 2012-08-13T15:12:17.480 に答える