我正在尝试创建一个弹出窗口,当我呈现视图控制器时,背景总是纯黑色,大小是全屏。
我似乎无法弄清楚什么是错的,这是我的代码
@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
}
每当我点击UIBarButtonItem时,它都会以全屏显示视图,但它不应该是我在第5行中指定的大小吗?
答案 0 :(得分:1)
其次,确保箭头方向指向箭头指向的方向,而不是内容与UIBarButtonItem相对应的位置。因此,如果它位于UIToolbar内(并且位于屏幕底部附近),那么您将需要.Up
,否则如果它是一个导航栏(靠近顶部),您将要使用{{1} }。
@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)
}
现在,如果你到目前为止它仍然无法正常工作,那么因为popover在紧凑大小类中的默认行为是填充屏幕。由于您已经将视图控制器设置为popover的委托,因此您只需要实现此委托函数:adaptivePresentationStyleForPresentationController(_:traitCollection:)
并返回.None
作为演示样式。这样您甚至可以在iPhone上显示真实的popover。有关完成此操作的完整示例,请参阅我的博文:iPhone Popover。