Swift - 弹出窗口在横屏模式下未正确显示

9

在横屏模式下,弹出窗口将占用整个屏幕,但在竖屏模式下可以正常工作。此外,在横屏模式下我点击弹出窗口外部时,它并不会消失。

我通过Storyboard连接了弹出窗口。在popoverviewcontroller中,我放置了一个包含按钮的视图。 popoverviewcontroller的viewdidload()代码如下:

override func viewDidLoad() {
    super.viewDidLoad()

    self.preferredContentSize = popoverView.frame.size
        }

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

肖像模式:

在此输入图片描述

横向模式:

在此输入图片描述

2个回答

13

@Jake2Finn的答案适用于Swift 4.0

具体来说,特征参数需要解决横向问题:

traitCollection: UITraitCollection

没有它,自适应功能...只适用于纵向。


我对这个描述有点困惑,但实际上在UIPopoverPresentationControllerDelegate中有两种adaptivePresentationStyle方法,你必须实现带有traitCollection参数的那一个 - 实现普通的adaptivePresentationStyle方法无法解决问题。 - John Stephen

12

你需要像这样在你的类中添加UIPopoverPresentationControllerDelegate

Swift 3

import UIKit

class ViewController: UIViewController, UIPopoverPresentationControllerDelegate {
    ...

作为第二步,添加以下函数:

func adaptivePresentationStyle(for controller: UIPresentationController, traitCollection: UITraitCollection) -> UIModalPresentationStyle {
    return UIModalPresentationStyle.none
}

解释:通过将UIModalPresentationStyle返回为none,原始的呈现风格被保留,并且您的弹出窗口在横向方向上不会被拉伸到屏幕底部。


6
横屏模式下它仍以弹出方式呈现,无法正常工作。 - Ruben
5
请参考Markv07的回答。adaptivePresentationStyle函数中的traitCollection: UITraitCollection参数是必需的,以使其正常工作。很明显这是iOS中的一个bug。 - fishinear

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接