Представление модального контроллера представления без покрытия текущего представления на iPhone

Я пытался добавить вид контейнера с оставлением 20px пространства по бокам. Но, похоже, это неправильный способ сделать это...

// ADD CHILD VIEW CONTROLLER
    [parentViewController addChildViewController:childViewController];
    [parentViewController.view addSubview:childViewController.view];
    [childViewController didMoveToParentViewController:parentViewController];

// REMOVE THE CHILD VIEW CONTROLLER
    [childViewController willMoveToParentViewController:nil];
    [childViewController view] removeFromSuperview];
    [childViewController removeFromParentViewController];

ОБНОВЛЕНИЕ Я понял это с помощью этого MZFormSheetController " https://github.com/m1entus/MZFormSheetController" Форма представления с классными переходами представления.

5 ответов

Решение

Используйте MZFormSheetController " https://github.com/m1entus/MZFormSheetController" Форма представления с классными переходами представления. Или, iOS 8 и выше, вы можете использовать viewController.modalPresentationStyle = UIModalPresentationOverCurrentContext;Удачи, дайте мне знать, если вы хотите полный фрагмент...

Вы можете попробовать что-то вроде,

DetailViewController *viewController= [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil];
viewController.modalPresentationStyle=UIModalPresentationFormSheet;
viewController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;

[self presentViewController:viewController animated:YES completion:^{
    viewController.view.superview.frame = CGRectMake(0, 0, 310, 500);
    viewController.view.superview.center = self.view.center;
}];

Задавать superview.frame а также modalTransitionStyle по твоим словам.

Вы на правильном пути. Но вы должны надолго добавить вид контейнера на раскадровку, тогда вы можете просто показать / скрыть его setHidden: метод.

Также вы можете показать второй контроллер, анимированный этим методом.

Лучше всего иметь свой собственный контроллер и вид.

На главном контроллере используйте настоящий контроллер вида.

[self presentViewController:myController animated:YES completion:nil];

На viewDidLoad настроить кадр myController.

CGRect newFrame = self.view.frame;
newFame.size.width -= 40;
newFame.size.height -= 40;
newFrame.origin.x = 20;
newFrame.origin.y = 20;
self.view.frame = newFrame

Добавление в качестве childViewController предназначено для удержания контроллера представления, когда вам нужен один контроллер с несколькими представлениями, каждый со своим собственным контроллером.

https://developer.apple.com/library/ios/featuredarticles/ViewControllerPGforiPhoneOS/CreatingCustomContainerViewControllers/CreatingCustomContainerViewControllers.html

  1. На iPhone и iPod touch представленное представление всегда полноэкранное. Таким образом, он не может быть представлен не полноэкранным контроллером просмотра.

  2. Не представляя контроллер представления, добавьте представление контроллера представления как подпредставление к родительскому контроллеру представления. Таким образом, вы можете контролировать внешний вид, даже теневой слой под ним.

Другие вопросы по тегам