2

我通常为 iPhone 做应用程序;今天我尝试为应用程序创建一个接口(通用二进制)。问题是我的屏幕很少有控件,我想使用 UIModalPresentationFormSheet 来调整界面。但是在使用这种演示的屏幕之后,我想切换回全屏(使用相同的导航控制器)。

最初在 iPhone 部分我有 UINavigationController -> 子控制器。由于它是相同的类控制器,我想为 iPad 保留类似的架构。目前我执行以下 UINavigationController -> ModalController -> UINavigationController -> 子控制器但如上所述,子控制器应该能够从 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);
    }
}

现在在我的子视图控制器中,我必须调用该方法两次(否则当您按下回时,模态视图的大小与前一个控制器保持不变,因此您必须将其放在 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 之间切换。现在还有一个问题:在storyboard上,view还是很小的,里面加东西也不容易。所以你必须这样做: 1/ 在情节提要中,单击视图控制器,它是小(框图标) 2/ 在属性面板上,将大小设置为 iPad 全屏

希望这会有所帮助,欢迎对如何改进代码发表任何评论:)

于 2012-07-18T09:29:56.363 回答