Этот вопрос был задан уже 3 раза до Swift 4, я думаю, и у меня похожая проблема.
Мой UIPopoverPresentationController
отображается как всплывающее окно в полноэкранном режиме в портретной + альбомной ориентации, и добавление .None
не устраняет проблему. Я использую iPhone 6 в качестве симулятора через XCode.
Вот что у меня есть:
@objcMembers class ViewController: UITableViewController, UIGestureRecognizerDelegate, UIPopoverPresentationControllerDelegate {
func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "settingsPopoverSegue" {
let buttonItemView = settingsButton.value(forKey: "view")
let viewForSource = (buttonItemView as! UIView)
popoverPresentationController?.sourceView = viewForSource
let popoverViewController = segue.destination
popoverViewController.popoverPresentationController!.delegate = self
popoverViewController.modalPresentationStyle = UIModalPresentationStyle.popover
popoverViewController.popoverPresentationController?.sourceRect = CGRect(x: view.center.x, y: view.center.y, width: 0, height: 0)
popoverViewController.popoverPresentationController?.permittedArrowDirections = UIPopoverArrowDirection(rawValue: 0)
}
}
func adaptivePresentationStyleForPresentationController(controller: UIPresentationController) -> UIModalPresentationStyle {
return UIModalPresentationStyle.none
}
}
У меня есть переход, подключенный от кнопки на раскадровке к popoverViewController.
Обновленный код выше - хорошо, поэтому я добавил sourceView, но всплывающее окно все еще перемещается на весь экран. Я все еще должен что-то упустить. Есть идеи?
Второе обновление: приведите его в действие с помощью кнопки настроек, и все же iphone покажет полный экран:
@IBAction func settingsTapped(segue: UIStoryboardSegue, sender: UIBarButtonItem) {
if segue.identifier == "settingsPopoverSegue" {
let buttonItemView = settingsButton.value(forKey: "view")
let viewForSource = (buttonItemView as! UIView)
popoverPresentationController?.sourceView = viewForSource
let popoverViewController = segue.destination
popoverViewController.popoverPresentationController!.delegate = self
popoverViewController.modalPresentationStyle = UIModalPresentationStyle.popover
popoverViewController.popoverPresentationController?.sourceRect = CGRect(x: view.center.x, y: view.center.y, width: 0, height: 0)
popoverViewController.popoverPresentationController?.permittedArrowDirections = UIPopoverArrowDirection(rawValue: 0)
}
}