我经常为iPhone做应用程序;今天我尝试为应用程序创建一个界面(通用二进制文件)。 问题是我有几个控件的屏幕,我想用UIModalPresentationFormSheet调整界面。但是在使用这种演示的屏幕后,我想切换回全屏(使用相同的导航控制器)。
最初在iPhone上我有UINavigationController - >子控制器。 由于它是相同的类控制器,我想为iPad保留类似的架构。 目前我做了以下几点 UINavigationController - > ModalController - > UINavigationController - >子控制器 但如上所述,子控制器应该能够从FormSheet切换到全屏,导航栏位于顶部。 我正在使用故事板。
据我所知,我对解释不太满意,这里有一个截图,应该澄清我的问题:https://dl.dropbox.com/u/9858108/stack_overflow_iPad_nav_issue.jpg
答案 0 :(得分:0)
好的,我找到了一个肮脏的解决方案,但解决了这个问题。 我有以下配置 NavigationController - > UIViewController - [模态] - > UINavigationController - > UIViewController1 - [推送] - > 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(PaperSheet大小):
-(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 /在故事板中,单击视图控制器,该控制器为小(框图标) 2 /在属性面板上,将大小设置为iPad全屏
希望这会有所帮助,欢迎任何关于如何改进代码的评论:)