4

我正在为我的地图应用程序使用故事板。禁用MKMapview时不会出现。启用会使我的应用程序崩溃。AutolayoutAutolayoutiPad(ios5)

4

2 回答 2

2

Autolayout 是 IOS 6 的一项功能-因此,当您说它运行 iOS 5 时,它会因此在您的 iPad 上崩溃。

将您的最低要求设置为 iOS 5(我假设您已经这样做了),然后只使用与 iOS5 相关的功能。该应用程序仍然适用于使用 iOS 6 设备的人:-)

也像@msgambel 说的那样——如果您能够发布一些代码,我们会更容易为您提供帮助。如果您认为问题出在 Storyboard 相关内容上,请发布一些屏幕截图。

于 2012-12-22T22:41:43.383 回答
1

如果你想支持 iOS 5,你不能在 Storyboard 文件中使用 Autolayout。因此,对于 iOS 5,您需要以旧方式放置所有视图元素。要在 iOS 6 中使用约束,您可以在代码中为 iOS 6 设置所有约束。

您可以使用以下宏来检查 iOS 6

#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v)  ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)

然后当您设置 ViewController 时,您需要检查 iOS 6

if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"6.0")) {
    // code here
}

并将约束绑定到视图。您可以在此处找到有关约束的小教程

如果您想将 Autolayout 与 Storyboard 或 xib 文件一起使用,您需要为 iOS 6 和 iOS 5 创建一个 Storyboard,分别为每个 xib 一个用于 iOS 6 和一个用于 iOS 5。iOS 6 可以使用 Autolayout iOS 5 的当然不是。设置完视图后,您需要检查 iOS 版本并分别为视图加载正确的故事板和 xib 文件。

对于 Storyboard,实例化代码为:

if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"6.0")) {
    UIStoryboard *sb = [UIStoryboard storyboardWithName:@"iOS6Storyboard" bundle:nil];
    UIViewController *vc = [sb instantiateViewControllerWithIdentifier:@"myViewController"];
    [self presentViewController:vc animated:YES completion:NULL];
} else {
    UIStoryboard *sb = [UIStoryboard storyboardWithName:@"iOS5Storyboard" bundle:nil];
    UIViewController *vc = [sb instantiateViewControllerWithIdentifier:@"myViewController"];
    [self presentViewController:vc animated:YES completion:NULL];
}

当为每个视图使用 xib 时,它是:

if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"6.0")) {
    ViewController *viewController = [[ViewController alloc] initWithNibName:@"ViewControlleriOS6" bundle:nil]; 
    [self.navigationController pushViewController:viewController animated:YES];
} else {
    ViewController *viewController = [[ViewController alloc] initWithNibName:@"ViewControlleriOS5" bundle:nil];
   [self.navigationController pushViewController:viewController animated:YES];
}

当然,xib ViewController 也可以模态呈现,故事板 ViewController 可以通过导航控制器推送。

于 2012-12-28T09:57:46.747 回答