2011-02-07 11 views
36

UITextViewsuperViewUIViewUIViewControllerインスタンス内にあるプレーンです。xcode/iOS:ビューを満たすために自動サイズ設定 - 明示的なフレームサイズは必須ですか?

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

// 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」プロパティを置き換え、ビューコントローラ内部の私自身の見解をインスタンス化する場合は、その後、すべてが期待どおりに動作し、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; 

私は実感しての「.view」を再インスタンスは醜いです、誰かが私が間違っていることを説明することはできますか?最初のフレーム設定コードをUIViewControllerに設定してUITextViewのサイズを変更し、その後autoresizingを希望どおりに動作させることで問題を解決できると私は推測しました。

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

...一見view.frameこの段階で設定されていない、それは定義されたその「.sizeの価値観を持っていないので、再びTextViewには小さいまま。

私は何をしたいのですか?スーパービューを埋めるには、フルスクリーンのサイズをUITextView:initWithFrameで明示的に指定する必要がありますか?

ご提供いただけるアドバイスに感謝します。

+1

あなた 'init'前にない' autorelease'を行います。正しい順序は '... alloc] init] autorelease]'です。 'UIView'はうまくいくはずですが、' autorelease'と 'init'を間違った順序で使うと' NSString'や他のクラスクラスタが漏れてしまいます。あなたの本当の質問を助けることができないため、申し訳ありません。 – Yuji

+1

ありがとう、ゆず、私はチップを感謝します - 私が気づいていなかった何か! – KomodoDave

答えて

88

自動サイズ調整は、サブビューがスーパービューのサイズを占めることを意味しません。スーパービューの境界が変わるたびに、スーパービューのサイズ変更に比例してサイズ変更されることを意味します。最初は、サブビューのサイズを正しい値に設定する必要があります。自動サイズ変更マスクは、今後サイズの変更を処理します。

これはあなたが必要とするすべてである:

textView = [[[UITextView alloc] autorelease] initWithFrame:self.view.bounds]; 
[textView setAutoresizingMask:UIViewAutoresizingFlexibleWidth| 
           UIViewAutoresizingFlexibleHeight]; 
+1

私はこれをloadViewに入れます(最初に[super loadView]を呼び出すことを確認してください)。それはうまく仕事をします:)多くのありがとう、Ole – KomodoDave

+0

@KomodoDaveありがとう。本当に良い情報:D –

+0

Swiftの場合は、次のようになります: 'var textView = UITextView(frame:self.view.bounds) textView.autoresizingMask = UIViewAutoresizing.FlexibleWidth | UIViewAutoresizing.FlexibleHeight' – martinmose

0

そしてここスウィフト3ソリューション:

myView.autoresizingMask = [.flexibleWidth, .flexibleHeight] 
関連する問題