【发布时间】:2012-09-26 17:02:02
【问题描述】:
我已经有一个可以在 iPhone 4 和 iPad 上正常运行的项目。现在我想让该项目与 iPhone 5(4 英寸)兼容。
我尝试过使用“使用自动布局”,但它不起作用。
我的 Xcode 版本是 4.5 (4G182)。
我在互联网上搜索过,但找不到任何线索。
如果有人已经解决了这个问题,请指导我。
【问题讨论】:
标签: iphone objective-c xcode ios6
我已经有一个可以在 iPhone 4 和 iPad 上正常运行的项目。现在我想让该项目与 iPhone 5(4 英寸)兼容。
我尝试过使用“使用自动布局”,但它不起作用。
我的 Xcode 版本是 4.5 (4G182)。
我在互联网上搜索过,但找不到任何线索。
如果有人已经解决了这个问题,请指导我。
【问题讨论】:
标签: iphone objective-c xcode ios6
在名为 Default-568h@2x.png 的项目中放置一个 iPhone 5 的默认图像。 之后,iPhone 5 模拟器全屏启动了我的应用程序。
根据您的布局,您可能不需要自动布局。我可以使用 IB 中的自动调整大小设置来解决所有布局问题。最后很简单。我遇到了四种问题:
我在现有项目中更喜欢这种方式。在下一个项目中,我将检查自动布局功能。
最好, 本杰明
【讨论】:
我不建议创建单独的 xib 文件,这就是我所做的: 1. 增加4寸启动屏幕——如果你想使用iPhone 5的所有屏幕,这是必须的,没有其他设置。 2. 如果您使用的是 xib 文件,只需使用界面生成器打开它并选择每个视图按钮等并将其设置为动态放置(使用标尺选项卡)。注意设置窗口也要向上伸展。 3. 如果您对视图进行编码,请检查您是否动态设置了位置和大小。
请注意,“自动布局”不向后兼容,因此它无法在 iOS6 之前的 iOS 版本上运行(它只会崩溃)!如果您从头开始,但对于不太好的旧应用程序,这可能很有用。
【讨论】:
您是否尝试将名为 Default-568h@2x.png 的新启动图像添加到您的项目中?
【讨论】:
一种可能的解决方案(可能不是最好的解决方案)是根据屏幕大小加载不同的 .xib 文件。这样,您仍然可以保存与以前的 iOS 版本 (initWithNibName:
@implementation UIViewController (iPhone5Support)
-(id) initAutomaticallyWithNibName:(NSString *)nibNameOrNil orIOS6NibName:(NSString*) IOS6NibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
BOOL isiPhone5 = CGSizeEqualToSize([[UIScreen mainScreen] preferredMode].size,CGSizeMake(640, 1136));
if (isiPhone5==NO) {
self = [self initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
} else {
self = [self initWithNibName:IOS6NibNameOrNil bundle:nibBundleOrNil];
if (self==nil) { NSLog(@" initAutomaticallyWithNibName ERROR - nil for io6 nib name"); }
}
return self;
}
@end
这样使用它:
UIViewController *controller = [[UIViewController alloc] initAutomaticallyWithNibName:@"UIViewControllerXibName" orIOS6NibName:@"UIViewControllerXibName_4inch" bundle:nil];
(别忘了为同一个控制器创建2个xib文件)
【讨论】: