2011-04-15 3 views
0

ユーザーがナビゲーションバーのボタンを押したときに表示されるカスタムUIViewを作成しました。私は自分の見解をコードにします。私のloadviewでは、私は自動サイズ変更マスクとビューの読み込みを画面上で正しく設定しました。しかし、ユーザーがボタンをタップしたときに表示されるUIViewは、自動サイズ調整マスクを設定してもサイズが変更されません。自動表示するUIViewが必要

UIView *blackView = [[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0, 320.0, 416.0)]; 
blackView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; 

は、私が代わりにS elf.view.frame.size.widthself.view.frame.size.heightを使用する必要がありますか?なぜ私がしたら?マスクのサイズを変更してもloadViewの外で動作しないのですか? VIEW2
持つビュー:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
    return YES; 
} 

のは、サイズ変更が必要なビューがあるとしましょう:

は:)

答えて

1

autoresizingMaskは、そのスーパービューs frame changes. if all you are doing is showing the blackView when you tap a button, then blackView`が最初に設定したフレームを持っていると、ビューがどのように動作するかに影響します。

blackViewの設定と表示方法についてのコードをいくつか追加してください。それはスーパービューで、blackViewのサイズを変更すると予想される状況について詳しく説明しています。あなたが心配していること。

0

まず物事は最初、私はあなたがこれをやった願っていますお時間をいただき、ありがとうございますサブビューとしてVIEW2は次のとおりです。VIEW1

VIEW1を作成している間、あなたのようにそれを宣言します:

view1 = [[UIView alloc] init]; 
[view1 setNeedsLayout]; 
示すように

今VIEW1の.mファイルにあなたがlayoutSubviewsメソッドをオーバーロードする必要があります:ケースVIEW1で

- (void)layoutSubviews 
{ 
    CGRect frame = view2.frame; 
    // apply changes to frame 
    view2.frame = frame; 
} 

は、View Controllerのビューである、あなたは、上記のようにwillRotate方法で同じもの示すようにすることを行う必要があります

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration 
{ 
    [super willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration]; 

    CGRect frame = view2.frame; 
    // apply changes to frame 
    view2.frame = frame; 
} 

これは私が向きの変更を処理するために使用する試行錯誤された方法です。

+0

willRotateメソッドでは、View Controllerがまだ回転していないので、self.view.frameを使用して新しいフレームをレンダリングしても、必要なものは得られません。新しいフレームを設定するには、 "toInterfaceOrientation"を使用する必要があります。 – Sid

+0

ええええええええええええええええええええええええええええええええええええええええっとOPが自動サイズ設定の動作の仕組みを理解しようとしているだけの場合、この回答は混乱を招きます。 – XJones