UIPopoverPresentationController отображается как всплывающее окно - PullRequest
0 голосов
/ 09 мая 2018

Этот вопрос был задан уже 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)
    }
}

1 Ответ

0 голосов
/ 09 мая 2018

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

 let buttonItemView = YourBarButtonItem.value(forKey: "view")
 et buttonItem = (buttonItemView as! UIView)
 popoverPresentationController?.sourceRect = Your Rect
 popoverPresentationController?.sourceView = buttonItem
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...