Как представить полупрозрачный (половинный) 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;
}
Другие вопросы по тегам