iPad: сбой UIModalPresentationFormSheet в альбомном режиме - PullRequest
3 голосов
/ 22 сентября 2011

У нас следующая проблема в нашей версии для iPad.

У меня есть NavigationController внутри UITabBar.Я хочу показать форму, похожую на форму электронной почты.

Я использую тот же код, чтобы показать модель по центру:

// View to be displayed in the modal
AdhocViewController *controller = [[AdhocViewController alloc] initWithNibName:@"AdhocViewController" bundle:[NSBundle mainBundle]];
controller.caller = self;

// The form will need a navigation bar to cancel or save the form
UINavigationController *modalViewNavController = [[UINavigationController alloc] 
                                               initWithRootViewController:controller];

// Configurate the modal presentation and transition
modalViewNavController.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
modalViewNavController.modalPresentationStyle = UIModalPresentationFormSheet;

// Show the new view
[self presentModalViewController:modalViewNavController animated:YES];

Этот код отлично работает в портретном режиме, но в альбомной ориентации вид частично выходит за пределы экрана ... и я пока не нашел пути его решения.

Я тестирую некоторые из найденных здесь решений ...

И попробуйте добавить следующие строки после предустановки вида модели, чтобы изменить его размер, но не получается

controller.view.superview.frame = CGRectMake(0, 0, 600, 700);
controller.view.superview.center = self.view.center;

Любое предложение?

Спасибо,

Иван

Ссылки в StackOverflow:

Ответы [ 3 ]

5 голосов
/ 19 декабря 2013

В iOS7 трюк состоит в том, чтобы установить для modalTransitionStyle значение UIModalTransitionCrossDissolve.

UIViewController *viewController = [[UIViewController alloc] init];
UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:viewController];

navigationController.modalPresentationStyle = UIModalPresentationFormSheet;
navigationController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;

[self presentViewController:navigationController animated:YES completion:nil];
navigationController.view.superview.frame = CGRectMake(0, 0, 800, 544);
navigationController.view.superview.center = self.view.center;

https://coderwall.com/p/vebqaq

1 голос
/ 23 сентября 2011

Наконец код был следующим:

// Remove the modalTransitionStyle to enable the default behaviour and change to PageSheet
modalViewNavController.modalPresentationStyle = UIModalPresentationPageSheet;
// Present the modal view and adapt the center depending of the orientation
[self presentModalViewController:modalViewNavController animated:YES];

UIDeviceOrientation _orientation = [controller interfaceOrientation];
if (UIDeviceOrientationIsPortrait(_orientation)){
    modalViewNavController.view.superview.center = CGPointMake(768/2, 1024/2 + 10);
} else {
    modalViewNavController.view.superview.center = CGPointMake(768/2 - 10, 1024/2);
}

+10 и -10 из-за того, что по умолчанию NavigationController модального режима не отображался в верхней части экрана.

Это... дрянное решение: SS, но работает ... Хотя, если у кого-то есть предложения, было бы неплохо узнать.

Похоже, что если мне нужно включить один и тот же центр для обеих ориентаций, возможно, ориентация суперпредставления не является ожидаемой.

В этом решении, когда я отклоняю модальное представление на Портреториентация, по крайней мере, на симуляторе iPad, он автоматически поворачивается в портретный режим ...

Окончательное решение состояло в том, чтобы выполнить presentModalViewController над главным контроллером, UITabBar, и обновить метод dismiss, который будет выполнен также черезит.

[tabbar presentModalViewController:modalViewNavController animated:YES];

UIDeviceOrientation _orientation = [controller interfaceOrientation];
if (UIDeviceOrientationIsPortrait(_orientation)){
    modalViewNavController.view.superview.center = CGPointMake(768/2, 1024/2 + 10);
} else {
    modalViewNavController.view.superview.center = CGPointMake(1024/2, 768/2 + 10);
}

Наконец-то !!!!

Спасибо,

Иван

0 голосов
/ 17 сентября 2014

В iOS 7, чтобы решить проблему отображения контроллера модального вида слева после появления клавиатуры (у меня возникает проблема, когда я представляю EKEventEditViewController в UIModalPresentationFormSheet, я делаю:

[self presentViewController:modalViewController animated:YES completion:^{
    modalViewController.view.superview.center = self.view.center;
}];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...