我有一个通用的应用程序和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];
}
答案 0 :(得分:1)
有两种方法可以解决这个问题。
首先,您可以创建特定于iPad和iPhone 5的帧。
其次,您可以根据父视图或其他子视图自动调整视图大小。这是通过自动调整完成的。一个很好的链接描述了这个:iOS 5 iPhone Rotation, View Resizing and Layout Handling
我注意到你的代码使用旧的布局视图方式,即检测界面方向,然后根据它来布置框架。从iOS 6开始强调的更好的方法是使用layoutSubviews()和随播。