Хорошо, я нашел грязное решение, но это решило проблему. У меня есть следующая конфигурация NavigationController -> UIViewController -[Modal]-> UINavigationController -> UIViewController1 -[Push]-> UIViewController2 (см. скриншот выше).
Теперь идея состоит в том, чтобы изменить размер ModalView (я использую ландшафтный режим, поэтому портрет не поддерживается, но вы можете легко изменить код). У меня есть класс singletton, который содержит полезные методы, я назвал 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. Теперь осталась одна проблема: на раскадровке представление все еще маленькое, и добавить внутрь что-то непросто. Итак, вы должны сделать это: 1/В раскадровке щелкните контроллер представления, который является маленьким (значок коробки) 2/На панели атрибутов установите размер на полноэкранный режим iPad.
Надеюсь, это поможет, любые комментарии о том, как улучшить код, приветствуются :)
person
SlumTheSlug
schedule
18.07.2012