Предотвратите представление UIPopover в виде UIPageSheet на iPhone 6 и в альбомной ориентации
Я пытаюсь показать popOver
с UISlider
внутри, чтобы позволить пользователю контролировать textSize
из WKWebView
,
Вот как я это сделал:
MYCustomViewController *popoverContent = [[self storyboard] instantiateViewControllerWithIdentifier:@"MYCustomViewController"];
popoverContent.delegate = self;
popoverContent.modalPresentationStyle = UIModalPresentationPopover;
UIPopoverPresentationController *popover = popoverContent.popoverPresentationController;
popoverContent.preferredContentSize = CGSizeMake(220, 40);
popover.delegate = self;
popover.barButtonItem = (UIBarButtonItem *)sender;
[self presentViewController:popoverContent animated:YES completion:nil];
В обычай ViewController
Я просто добавил делегата, чтобы получить значение UISlider
Я также реализовал метод:
- (UIModalPresentationStyle)adaptivePresentationStyleForPresentationController:(UIPresentationController *)controller
{
return UIModalPresentationNone;
}
Все прекрасно работает на всех устройствах, кроме iPhone 6 Plus в альбомной ориентации (т.е. компактная высота), которая отображает popover
как UIPageSheet
Примечание: я представляю поповер из UIbarButtonItem
, в detailViewController
из UISplitViewController
1 ответ
Я решил эту проблему, внедрив новый adaptivePresentationStyleForPresentationController:traitCollection:
метод UIAdaptivePresentationControllerDelegate:
как предложено @Joshua
- (UIModalPresentationStyle)adaptivePresentationStyleForPresentationController:(UIPresentationController *)controller traitCollection:(UITraitCollection *)traitCollection {
// This method is called in iOS 8.3 or later regardless of trait collection, in which case use the original presentation style (UIModalPresentationNone signals no adaptation)
return UIModalPresentationNone;
}
UIModalPresentationNone
говорит контроллеру презентаций использовать оригинальный стиль презентации, который в вашем случае будет отображать popover
,