2

私は通常、iPhone 用のアプリを作成します。今日は、アプリのインターフェイス (ユニバーサル バイナリ) を作成しようとしています。問題は、コントロールがほとんどない画面があり、UIModalPresentationFormSheet を使用してインターフェイスを調整したいということです。しかし、この種のプレゼンテーションを使用する画面の後、(同じナビゲーションコントローラーを使用して) フルスクリーンに戻したいと思います。

最初に iPhone の部分に UINavigationController -> サブ コントローラーがあります。同じクラスのコントローラなので、iPadでも同様のアーキテクチャを維持したいと考えています。現在、私は次の UINavigationController -> ModalController -> UINavigationController -> sub controllers を実行していますが、上記で説明したように、サブコントローラーは FormSheet からフルスクリーンに切り替えることができ、ナビゲーションバーが上部にあるはずです。ストーリーボードを使用しています。

そして、私は説明があまり得意ではないことを知っているので、ここに私の問題を明確にするスクリーンショットがあります: https://dl.dropbox.com/u/9858108/stack_overflow_iPad_nav_issue.jpg

4

1 に答える 1

0

わかりました、私は汚い解決策を見つけました、しかしそれは問題を修正しました。次の構成があります。NavigationController->UIViewController-[Modal]->UINavigationController-> UIViewController1-[Push]-> UIViewController2(上のスクリーンショットを確認してください)。

ここでのアイデアは、ModalViewのサイズを変更することです(横向きモードを強制するため、縦向きはサポートされていませんが、コードを簡単に変更できます)。AppKitと呼ばれる便利なメソッドを含む一重項クラスがあります。AppKit.mの場合:

#pragma mark - Window functions (modal, ...)

/**
 * Cette méthode redimmensionne une modal view en type PaperSheet.
 * Utilisé dans le viewDidAppear du controller enfant.
 * Permet de mettre des modal view en fullscreen.
 *
 * @param id viewController Le viewController parent
 */
- (void)resizeModalToPaperSheet:(id) viewController {
    // Adaptation de la taille de la fenêtre pour iPad
    if (isIPad) {
        [viewController navigationController].view.superview.center = CGPointMake(0.0f, 0.0f);
        [viewController navigationController].view.superview.frame = CGRectMake(84.0f, 242.0f, 540.0f, 540.0f);
    }
}

/**
 * Cette méthode redimmensionne une modal view en type FullScreen.
 * Utilisé dans le viewDidAppear du controller enfant.
 * Permet de mettre des modal view en fullscreen.
 *
 * @param id viewController Le viewController parent
 */
- (void)resizeModalToFullScreen:(id) viewController {
    // Adaptation de la taille de la fenêtre pour iPad
    if (isIPad) {
        [viewController navigationController].view.superview.center = CGPointMake(0.0f, 0.0f);
        [viewController navigationController].view.superview.frame = CGRectMake(20.0f, 0.0f, 754.0f, 1024.0f);
    }
}

サブビューコントローラで、メソッドを2回呼び出す必要があります(そうでない場合、モーダルビューのサイズは前のコントローラから保持されるため、viewDidAppearに配置する必要があります)。

ViewController 1(ペーパーシートサイズ):

-(void) viewWillAppear:(BOOL)animated {
    [[AppKit sharedInstance] resizeModalToPaperSheet: self];
}

-(void) viewDidAppear:(BOOL)animated {
    [[AppKit sharedInstance] resizeModalToPaperSheet: self];
}

ViewController 1(フルスクリーンサイズ):

-(void) viewWillAppear:(BOOL)animated {
    [[AppKit sharedInstance] resizeModalToFullScreen: self];
}

-(void) viewDidAppear:(BOOL)animated {
    [[AppKit sharedInstance] resizeModalToFullScreen: self];
}

そして、それはかなりうまく機能します; フルスクリーンとPaperSheetを簡単に切り替えることができます。残りの問題が1つあります。ストーリーボードでは、ビューがまだ小さく、内部にコンテンツを追加するのは簡単ではありません。したがって、これを行う必要があります:1 /ストーリーボードで、小さいビューコントローラーをクリックします(ボックスアイコン)2 /属性パネルで、サイズをiPadフルスクリーンに設定します

これがお役に立てば幸いです。コードを改善する方法についてのコメントは大歓迎です:)

于 2012-07-18T09:29:56.363 に答える