4

マップ アプリケーションにストーリーボードを使用しています。が無効になってMKMapviewいる場合は表示されません。有効にすると、アプリがクラッシュします。AutolayoutAutolayoutiPad(ios5)

4

2 に答える 2

2

Autolayout は IOS 6 の機能です。そのため、iOS 5 を実行していると言うと、その理由で iPad でクラッシュします。

最小要件を iOS 5 に設定し (既に完了していると思います)、iOS5 に関連する機能のみを使用します。このアプリは、iOS 6 デバイスを使用しているユーザーに対しても引き続き実行されます:-)

また、@msgambelが言ったように、コードを投稿できれば、私たちがあなたを助けるのがより簡単になります. 問題がストーリーボード関連のものにあると思われる場合は、スクリーンショットを投稿してください。

于 2012-12-22T22:41:43.383 に答える
1

iOS 5 をサポートしたい場合は、ストーリーボード ファイルで 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
}

制約をビューにバインドします。ここで、制約に関する小さなチュートリアルを見つけることができます。

Storyboard または xib ファイルで Autolayout を使用する場合は、iOS 6 用の Storyboard と iOS 5 用の Storyboard を、iOS 6 用と iOS 5 用の xib ごとにそれぞれ作成する必要があります。もちろん違います。ビューの設定が完了したら、iOS バージョンを確認し、ビューの正しいストーリーボードと xib ファイルをそれぞれロードする必要があります。

ストーリーボードの場合、インスタンス化コードは次のようになります。

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 に答える