Я использую новую адаптивную функцию «Present As Popover» в iOS 8. Я подключил простой переход в StoryBoard, чтобы сделать презентацию. Он отлично работает на iPhone 6 Plus, поскольку представляет вид в виде всплывающего окна, а на iPhone 4s — в полноэкранном режиме (стиль листа).
Проблема заключается в том, что при отображении в полноэкранном режиме мне нужно добавить кнопку «Готово» в представление, чтобы можно было вызвать команду rejectViewControllerAnimated. И я не хочу показывать кнопку «Готово», когда она отображается как всплывающее окно.
Я попытался просмотреть свойства как PresentationController, так и popoverPresentationController, и я не могу найти ничего, что говорило бы мне, действительно ли оно отображается как всплывающее окно.
NSLog( @"View loaded %lx", (long)self.presentationController.adaptivePresentationStyle ); // UIModalPresentationFullScreen
NSLog( @"View loaded %lx", (long)self.presentationController.presentationStyle ); // UIModalPresentationPopover
NSLog( @"View loaded %lx", (long)self.popoverPresentationController.adaptivePresentationStyle ); // UIModalPresentationFullScreen
NSLog( @"View loaded %lx", (long)self.popoverPresentationController.presentationStyle ); // UIModalPresentationPopover
AdaptivePresentationStyle всегда возвращает UIModalPresentationFullScreen, а PresentationStyle всегда возвращает UIModalPresentationPopover.
При просмотре коллекции UITraitCollection я нашел черту под названием «_UITraitNameInteractionModel», которая была установлена в 1 только тогда, когда она фактически отображалась как всплывающее окно. Однако Apple не предоставляет прямого доступа к этому признаку через traitCollection popoverPresentationController.