我正在尝试提供一个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"协议
答案 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
}