質問

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 プロパティ。

- (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
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top