2011-08-30 10 views
9

オリエンテーションを変更すると、テキストビューのサイズが適切に調整されず、境界が右端または左端または下端または上端にジャンプします。ここに私のコードがあります。私のフルテキストUIViewのサイズを変更するにはどうすればよいですか向きを変更するときにUIViewのサイズを正しく変更するにはどうすればよいですか?

- (void)viewDidLoad 
{ frameHor=CGRectMake(0,10,275,306); 
    frameVer=CGRectMake(0, 51, 320, 351); 
.. 
} 



- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration{ 
    [super willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration]; 
    if(toInterfaceOrientation == UIInterfaceOrientationPortrait || toInterfaceOrientation == UIInterfaceOrientationPortraitUpsideDown){ 
     //self.view = portraitView; 
     [self changeTheViewToPortrait:YES andDuration:duration]; 

    } 
    else if(toInterfaceOrientation == UIInterfaceOrientationLandscapeRight || toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft){ 
     //self.view = landscapeView; 
     [self changeTheViewToPortrait:NO andDuration:duration]; 
    } 
} 

//-------------------------------------------------------------------------------------------------------------------------------------------------------------------- 

- (void) changeTheViewToPortrait:(BOOL)portrait andDuration:(NSTimeInterval)duration { 

    [UIView beginAnimations:nil context:NULL]; 
    [UIView setAnimationDuration:duration]; 

    if(portrait){ 

     self.titleLabel.hidden=NO; 
     self.backButton.hidden=NO; 
     [self.view setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"det.png"]]]; 
     self.fullText.frame=CGRectMake(frameVer.origin.x, frameVer.origin.y, frameVer.size.width, frameVer.size.height); 



    } 
    else{ 

     self.titleLabel.hidden=YES; 
     self.backButton.hidden=YES; 

     self.fullText.frame=CGRectMake(frameHor.origin.x, frameHor.origin.y, frameHor.size.width, frameHor.size.height); 
     [self.view setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"T_iphoneauto.png"]]]; 




    } 

    [UIView commitAnimations]; 
} 

答えて

19

UIViewのautoresizingMaskプロパティを使用できます。 iOSのドキュメントから

blackView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleBottomMargin | 
           UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | 
           UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin; 

:たとえばビューの境界を変更

ディスカッション 、そのビューは自動的に各サブビューの自動サイズ変更マスクに従ってサブビューのサイズを変更します。このマスクの値は、Cビット単位のOR演算子を使用してUIViewAutoresizingで記述された定数を組み合わせて指定します。これらの定数を組み合わせると、ビューのどの次元をスーパービューに対して拡大または縮小するかを指定できます。このプロパティのデフォルト値はUIViewAutoresizingNoneです。ビューのサイズを変更しないでください。

同じ軸に沿って複数のオプションが設定されている場合、デフォルトの動作は、フレキシブルな部分に比例してサイズの差を分散することです。可撓性部分が他の可撓性部分よりも大きくなればなるほど、それはより多く成長する可能性がある。たとえば、このプロパティにUIViewAutoresizingFlexibleWidthおよびUIViewAutoresizingFlexibleRightMargin定数が含まれていて、UIViewAutoresizingFlexibleLeftMargin定数が含まれていないとすると、ビューの左余白の幅は固定されていますが、ビューの幅と右余白は変更される可能性があります。したがって、ビューは、スーパービューの左側に固定されて表示され、ビューの幅とビューの右側のギャップは増加します。

ビューに必要な正確なレイアウトが自動表示動作で得られない場合は、カスタムコンテナビューを使用してlayoutSubviewsメソッドをオーバーライドして、サブビューをより正確に配置できます。詳細はここを見てのために

UIView class reference

+0

はい、おかげで、私はautoresizingMaskトリックを理解するが、景観に私はいくつかのビューを隠し、最大のTextView持ち上げる必要がある場合...私はもっと良いものが見つからない場合は、私がAutoResizingMaskで停止します –

+0

別のビューモードを使用しているときに、そのプロパティを変更したり、フレームを変更したりすることができます。 – Nekto

関連する問題