iOS 9呈现Popover全屏显示

时间:2016-08-03 18:15:20

标签: ios swift swift2 ios9

我正在尝试提供一个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
}

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

2 个答案:

答案 0 :(得分:2)

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

    popoverPresentationController?.delegate = self

下面

    popoverPresentationController?.sourceRect = filters_button.frame

并移动

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

到函数的结尾。

答案 1 :(得分:1)

您应该添加以下内容

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