UITextView
をsuperView
に埋めたいのですが、これはUIView
インスタンス内のUIViewController
です。
UITextView
とautoresizingMask
の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
を介してフルスクリーンサイズを明示的に指定する必要がありますか?
あなたが提供できるアドバイスに感謝します。
自動サイズ変更は、サブビューがそのスーパービューのサイズを占有することを意味するものではありません。これは、スーパービューの境界が変更されるたびに、スーパービューのサイズの変更に応じてサイズが変更されることを意味します。そのため、最初はサブビューのサイズを正しい値に設定する必要があります。自動サイズ変更マスクは、将来のサイズ変更を処理します。
これで十分です:
textView = [[[UITextView alloc] autorelease] initWithFrame:self.view.bounds];
[textView setAutoresizingMask:UIViewAutoresizingFlexibleWidth|
UIViewAutoresizingFlexibleHeight];
そしてここにSwift解決策:
myView.autoresizingMask = [.flexibleWidth, .flexibleHeight]