如何在iOS9中展示PopOver

Gal*_*age 7 ios swift

我正在尝试创建一个弹出窗口,当我呈现视图控制器时,背景总是纯黑色,大小是全屏.

我似乎无法弄清楚什么是错的,这是我的代码

  @IBAction func distancePopOver( sender : UIBarButtonItem){

    //a UIViewController that I created in the storyboard
    let controller = storyboard!.instantiateViewControllerWithIdentifier("distancePopOver")
    controller.modalPresentationStyle= UIModalPresentationSTyle.PopOver
    controller.preferredContentSize = CGSizeMake(200,30)
    self.presentViewController(controller, animated: true, completion: nil)

    //Configure the Popover presentation controller
    let popController = (controller.popoverPresentationController)!
    popController.permittedArrowDirections = UIPopoverArrowDirection.Down
    popController.barButtonItem = sender
    popController.delegate = self
  }
Run Code Online (Sandbox Code Playgroud)

每当我点击UIBarButtonItem时,它都会以全屏显示视图,但它不应该是我在第5行中指定的大小吗?

Kor*_*ton 1

弹出窗口现在非常挑剔。首先,您需要在呈现之前配置 popoverPresentationController。

其次,确保箭头方向指向箭头所指的方向,而不是内容相对于 UIBarButtonItem 的位置。因此,如果它位于 UIToolbar 内部(并且靠近屏幕底部),您会想要.Down否则,如果它是导航栏(靠近顶部),您会想要使用.Up.

@IBAction func distancePopOver( sender : UIBarButtonItem){

    //Configure the Popover presentation controller
    let popController = (controller.popoverPresentationController)!
    popController.permittedArrowDirections = .Down // .Up
    popController.barButtonItem = sender
    popController.delegate = self

    //a UIViewController that I created in the storyboard
    let controller = storyboard!.instantiateViewControllerWithIdentifier("distancePopOver")
    controller.modalPresentationStyle = .Popover
    controller.preferredContentSize = CGSizeMake(200,30)

    presentViewController(controller, animated: true, completion: nil)
}
Run Code Online (Sandbox Code Playgroud)

现在,如果您已经走到这一步了,但它仍然不起作用,那是因为弹出窗口在紧凑尺寸类中的默认行为是填充屏幕。由于您已经将视图控制器设置为弹出窗口的委托,因此您只需要实现此委托函数:adaptivePresentationStyleForPresentationController(_:traitCollection:)并返回.None演示样式。这甚至可以让您在 iPhone 上显示真实的弹出框。请参阅我的博客文章:iPhone Popover,了解执行此操作的完整示例。