web-dev-qa-db-ja.com

xcode / iOS:ビューを埋めるための自動サイズ変更-明示的なフレームサイズは必須ですか?

UITextViewsuperViewに埋めたいのですが、これはUIViewインスタンス内のUIViewControllerです。

UITextViewautoresizingMaskのAPI指定のプロパティを使用するだけでは、autoresizesSubviewsにこれを実行させることはできないようです。ここに示すようにこれらを設定しても何も起こりません。 UITextViewが画面をいっぱいにしても、superViewは小さいままです。

// use existing instantiated view inside view controller;
// ensure autosizing enabled
self.view.autoresizesSubviews = YES;
self.view.autoresizingMask = UIViewAutoresizingFlexibleHeight|
                             UIViewAutoresizingFlexibleWidth;
// create textview
textView = [[[UITextView alloc] autorelease] initWithFrame:CGRectMake(0, 0, 1, 1)];
// enable textview autoresizing
[textView setAutoresizingMask:UIViewAutoresizingFlexibleWidth|
                              UIViewAutoresizingFlexibleHeight];
// add textview to view
[self.view addSubview:textView];

ただし、View Controller内で独自のビューをインスタンス化して '.view'プロパティを置き換えると、すべてが期待どおりに機能し、textViewがそのスーパービューを埋めます。

// reinstantiate view inside view controller
self.view = [[UIView alloc]init];
// create textview
textView = [[[UITextView alloc] autorelease] initWithFrame:CGRectMake(0, 0, 1, 1)];
// enable textview autoresizing
[textView setAutoresizingMask:UIViewAutoresizingFlexibleWidth|
                              UIViewAutoresizingFlexibleHeight];
// add textview to view
[self.view addSubview:textView];

これらすべての初期化子/メソッド内で両方のコードチャンクを試しましたが、すべてのケースで同じ状況が発生します。

-(id)init;
-(id)initWithFrame:(CGRect)frame;
-(void)viewDidLoad;

UIViewControllerの '.view'を再インスタンス化するのは面倒だと思いますが、私が間違っていることを誰かが説明できますか?最初のフレーム設定コードをUIViewControllerに入れてUITextViewのサイズを1回変更することで問題を克服でき、その後autoresizingが必要に応じて動作すると思いました。

-(void)viewDidLoad {
    textView.frame = self.view.frame;
}

...しかし、view.frameはこの段階では設定されていないようです。定義された '.size'値がないため、再びtextViewは小さいままです。

私が望むものを達成する適切な方法は何ですか?スーパービューを満たすためにUITextView:initWithFrameを介してフルスクリーンサイズを明示的に指定する必要がありますか?

あなたが提供できるアドバイスに感謝します。

36
KomodoDave

自動サイズ変更は、サブビューがそのスーパービューのサイズを占有することを意味するものではありません。これは、スーパービューの境界が変更されるたびに、スーパービューのサイズの変更に応じてサイズが変更されることを意味します。そのため、最初はサブビューのサイズを正しい値に設定する必要があります。自動サイズ変更マスクは、将来のサイズ変更を処理します。

これで十分です:

textView = [[[UITextView alloc] autorelease] initWithFrame:self.view.bounds];
[textView setAutoresizingMask:UIViewAutoresizingFlexibleWidth|
                              UIViewAutoresizingFlexibleHeight];
89
Ole Begemann

そしてここにSwift解決策:

myView.autoresizingMask = [.flexibleWidth, .flexibleHeight]