0

iPhone用のコードセットにユニバーサルアプリケーションとサブビューのフレームがあり、iPadシミュレーターを配置するとサブビューが同じサイズであることがわかりました。そのため、iPad のすべてのフレームを書き直さなければなりませんか、それともショートカットはありますか? これがコードです。

 -(void) layoutPortrait {

self.imageView= [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"bar_V.png"]];
self.imageView.frame= CGRectMake(0, 0, 320, 80);
self.labelTitle.frame =CGRectMake(14, 103, 91, 54);
self.buttonFavorites.frame= CGRectMake(109, 485, 33, 33);
self.buttonHome.frame =CGRectMake(14, 485, 33, 33);
self.buttonMap.frame=CGRectMake(61, 485, 33, 33);


 }

 -(void) layoutLandscape {

self. imageView= [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"bar_O.png"]];
self.imageView.frame= CGRectMake(0,0,568,65 );
self.labelTitle.frame =CGRectMake(20,92,165,48);
self.buttonFavorites.frame= CGRectMake(107,237,33,33);
self.buttonHome.frame =CGRectMake(11,237,33,33);
self.buttonMap.frame=CGRectMake(59,237,33,33);



 }


 - (void)viewDidLoad
{
[super viewDidLoad];
self.navigationController.navigationBar.hidden=YES;
// Do any additional setup after loading the view from its nib.

//orientazioni
UIInterfaceOrientation deviceOrientation= self.interfaceOrientation;


if(deviceOrientation == UIInterfaceOrientationPortrait || deviceOrientation== UIInterfaceOrientationPortraitUpsideDown) {
    [self layoutPortrait];

}
else if (deviceOrientation== UIInterfaceOrientationLandscapeRight){
    [self layoutLandscape];

}
else if (deviceOrientation==UIInterfaceOrientationLandscapeLeft){

    [self layoutLandscape];



}


[self.view addSubview:self.labelTitle];
[self.view addSubview:self.imageView];
[self.view addSubview:self.buttonFavorites];
[self.view addSubview:self.buttonHome];
[self.view addSubview:self.buttonMap];
}
4

1 に答える 1

1

これには 2 つの方法があります。

まず、iPad と iPhone 5 専用のフレームを作成できます。

次に、親ビューまたは他のサブビューに従ってビューのサイズを自動的に変更します。これは自動サイズ変更で行われます。これを説明する素敵なリンク: iOS 5 iPhone Rotation, View Resizing and Layout Handling

あなたのコードはビューをレイアウトする古い方法を使用していることに気付きました。つまり、インターフェイスの向きを検出し、それに従ってフレームをレイアウトします。iOS 6 以降で強調されているより良い方法は、layoutSubviews() とコンパニオンを使用することです。

于 2012-10-08T08:21:22.107 に答える