Как представить полупрозрачный (половинный) viewcontroller в iOS 8
В iOS 7 нет проблем для этого метода:
_rootViewController.modalPresentationStyle = UIModalPresentationCurrentContext;
[_rootViewController presentViewController:self animated:NO completion:nil];
Но в iOS 8 он ничего не делал. Как это решить? Это ошибка для iOS 8?
2 ответа
Мой ответ более прост, код ниже. Это работает в iOS8 (XCode6 GM seed).
HogeViewController *vc = [[HogeViewController alloc] init];
vc.modalPresentationStyle = UIModalPresentationOverFullScreen;
[self presentViewController:vc animated:NO completion:nil];
Обратите внимание, что этот обходной путь был необходим для xcode6_beta7. Последний xcode6 имеет фиксированные стили UIModalPresentationOver*. Итак, я просто назначаю их myModalViewController.modalPresentationStyle, и теперь все работает нормально.
Наконец-то заставил его работать в iOS 8 после прочтения справки UIPresentationController и этого поста
appDelegate.window.rootViewController.modalPresentationStyle = UIModalPresentationCurrentContext;
MyModalController *myModalController = [[MyModalController alloc] initWithNibName:@"MyModalController" bundle:nil];
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:myModalController];
navController.modalPresentationStyle = UIModalPresentationCustom;
navController.transitioningDelegate = myModalController;
[self.navigationController presentViewController:navController animated:YES completion:nil];
Вы можете заставить модальный контроллер вида наследоваться от UIViewControllerTransitioningDelegate
@interface MyModalController : UIViewController <UIViewControllerTransitioningDelegate>
и переопределить presentationControllerForPresentedViewController:...
-(UIPresentationController *)presentationControllerForPresentedViewController:(UIViewController *)presented presentingViewController:(UIViewController *)presenting sourceViewController:(UIViewController *)source
{
if (presented == self) {
return [[TransparentPresentationController alloc] initWithPresentedViewController:presented presentingViewController:presenting];
} else {
return nil;
}
}
возврат экземпляра TransparentPresentationController, который наследуется от UIPresentationController
@interface TransparentPresentationController : UIPresentationController
и переопределяет mustRemovePresentersView
- (BOOL) shouldRemovePresentersView {
return NO;
}