私は、ビューベースのテーブルビューでは、行NSViewのNSTableCellViewクラスのサブクラスです。このクラスには、NSTextFieldとNSImageViewという2つのプロパティがあります。私は画像ビューなしでNSTextFieldのみを使用しています。ただし、テーブルビューの一部のセルには複数行のテキストが含まれている必要がありますが、他のセルには1行または2行しか含まれていない場合があります。 NSTextFieldのtextFieldプロパティのサイズに応じて個々のNSTableCellViewビューのサイズを変更できるようにする必要があります。
したがって、私は次のことをする必要がありました:
- テーブルのセルビューでNSTextFieldのframeSizeを取得します。
- NSTableCellViewのframeSizeを、NSTextFieldのframeSizeに設定します(これは、set oneで取得したものです)
しかし、このアプローチはうまくいきませんでした。NSTableCellViewのサイズを変更する私のアプローチが間違っていると思い始めました。
[tableCellView setFrameSize:[[tableCellView textField] frame].size];
[tableCellView setNeedsDisplay:YES];
このアプローチに問題はありますか?私はセルのサイズを変更すると期待していますが、それはどうしますか?何がうまくいかないのですか?
ありがとう。
回答:
回答№1は2textFieldのサイズは、すべてのコンテンツを表示するのに必要な大きさとはほとんど関係がありません。
このコードを使用して、表のセルの幅に基づいて文字列の高さを決定します。
- (CGFloat) displayStringHeightWithWidth:(CGFloat)width
{
CGSize size = NSMakeSize(width,0);
NSRect bounds = [self.displayString boundingRectWithSize:size
options:NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading];
return bounds.size.height;
}
理想的には、textField.stringValueまたはtextField.attributedStringValueの高さを見つけることにそれを適応させることができます。上記はiOSではなくOSXからのものでもないので、YMMVは綿毛の一部にあります。
それはあなたのアルゴリズムを次のように変更します:
- テーブルの列の幅を取得する
- テキストフィールドのテキストに必要な境界矩形の高さを取得します。
- 行の高さが2で見つかったものであることをtableViewに伝えます。
今。 #3について私はあなたが 持ってる tableView:heightOfRow:を使用する NSTableViewDelegateプロトコルを使用して、テーブルの「noteHeightOfRowsWithIndexesChanged:」を呼び出して行の高さを変更します。tableViewは、セルの高さが変更されていることを認識しません。ディスカッションに注意してください ドキュメンテーションの中で。あなたのメソッドがデリゲートなしで動作し、テーブルに行の高さが変更されていることが汚れていることを伝えるだけかもしれませんが、実際には期待しませんでした。