iOS 9 呈现弹出框需要全屏

iOS 9 Presenting Popover takes full screen

我正在尝试展示一个 PopOver 视图控制器,专门用于在 TextField 旁边显示一个小的过滤器屏幕。但是它显示为全屏视图控制器。 filters_button 是应该触发弹出窗口的那个。任何想法为什么它显示全屏就好像它是正常的 ViewController?

func showFilters(){
    let tableViewController = UITableViewController()
    tableViewController.modalPresentationStyle = UIModalPresentationStyle.Popover
    tableViewController.preferredContentSize = CGSizeMake(20, 20)

    presentViewController(tableViewController, animated: true, completion: nil)

    let popoverPresentationController = tableViewController.popoverPresentationController
    popoverPresentationController?.sourceView = filters_button
    popoverPresentationController?.sourceRect = CGRectMake(0, 0, filters_button.frame.size.width, filters_button.frame.size.height)
}

func adaptivePresentationStyleForPresentationController(controller: UIPresentationController) -> UIModalPresentationStyle {
    return .None
}

注意:在我的 class 顶部,我声明它符合 "UIPopoverPresentationControllerDelegate" 协议

固定: 鉴于 PopOver 在 iPhone 设备上工作,您需要在呈现 viewController 之前设置 popoverPresentationController 的委托,这样委托会调用下面的方法。所以添加

    popoverPresentationController?.delegate = self

低于

    popoverPresentationController?.sourceRect = filters_button.frame

并移动

    self.presentViewController(filtersVC, animated: true, completion: nil)

函数结束。

您应该添加以下内容

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