UITextViewを取得してUITableViewCell内で自動サイズ調整する方法
-
05-07-2019 - |
質問
Setup: UITableViewCell
の contentView
内に UITextView
があります。私はそれがセルのフルサイズを占めることを望みます。次のようにテキストビューを作成します。
UITextView *textView = [[[UITextView alloc] initWithFrame:CGRectMake(0,0,268,43)] autorelease];
textView.backgroundColor = [UIColor redColor];
textView.layer.cornerRadius = 10;
textView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
そして、heightForRowAtIndexPathをオーバーライドして、その行に200を返します。
背景色は、どこにあるのかわかります。セルは、最初のビューで自動的に正しくサイズ変更されているようです。ただし、インターフェイスの自動回転中に適切にサイズを変更し続ける必要があります。これは、時々動作するようで、textViewを編集していない場合のみです。また、非常に低い高さ(-1のように見える)にビューのサイズを変更したり、幅を広げたり、まったくサイズ変更しなかったりすることもあります。
セル内のlayoutSubviewsをオーバーライドしようとしましたが、何もしませんが、それでもビューの場所全体のサイズ変更を停止しません。
しばらくハッキングしてきましたが、まだ解決策が見つかりませんでした。
解決
UITableViewCellには、UITableViewのデリゲートによって提供される高さが固定されています。デバイスを回転させても、tableViewで -reloadData
を呼び出さない限り、行の高さは変わりません。自動サイズ変更を取り除き、自分で管理します。
textFieldを初期化すると、フレームを CGRectZero
に簡単に設定できます。次に、 -layoutSubviews
を実装し(サブビューのフレームを設定する前に、そのメソッドでsuperを呼び出し、 )、 contentRect に従ってUITextFieldのフレームを設定しますセルのcode>プロパティ。
- (id)initWithFrame:(CGRect)frame reuseIdentifier:(NSString *)reuseIdentifier {
if(self = [super ...]){ // or -initWithStyle:reuseIdentifier: whatever you want
_textView = [[UITextView alloc] initWithFrame:CGRectZero]; // Instance variable
// Probably not needed to set autoresizing mask
}
return self;
}
- (void)layoutSubviews {
[super layoutSubviews];
_textView.frame = CGRectMake(0.0f, 0.0f, self.contentRect.size.width, self.contentRect.size.height); // Adjust as needed
}