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