[英]UIPopoverPresentationController Swift
I'm using Storyboards and AutoLayout. 我正在使用Storyboard和AutoLayout。 There are 2 scenes, 1 is my main view controller with a toolbar and several UIBarButtonItems and 1 is a UIViewController that should simply display a UILabel. 有2个场景,1个是我的主视图控制器,带有一个工具栏和几个UIBarButtonItems,1个是应该仅显示UILabel的UIViewController。 When the user taps a toolbar in my main view controller, I present the popover with the following code: 当用户点击主视图控制器中的工具栏时,我将使用以下代码显示弹出窗口:
func presentPopover(viewCtrl: UIViewController, item: UIBarButtonItem) {
viewCtrl.modalPresentationStyle = .Popover
let popover: UIPopoverPresentationController = viewCtrl.popoverPresentationController!
popover.permittedArrowDirections = .Any
popover.barButtonItem = item
self.presentViewController(viewCtrl, animated: true, completion: nil)
}
helpView = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("HelpView“) as? HelpVC
if helpView != nil {
presentPopover(helpView!, helpButton)
}
The view gets presented but no subviews (UILabel) are visible. 视图被呈现,但是没有子视图(UILabel)可见。 The same strange behaviour happens, when I setup storyboard segues instead of doing the popover presentation from code. 当我设置情节提要剧集而不是通过代码进行弹出窗口演示时,也会发生同样的奇怪行为。 However, when I push the very same view on my UINavigationController everything gets displayed fine. 但是,当我在UINavigationController上推送完全相同的视图时,一切都会很好地显示。 Am I missing something? 我想念什么吗?
Best Regards, Oliver 最好的问候,奥利弗
Adjust the sizes to what you want. 将尺寸调整为所需的尺寸。 You can set the barbutton instead of the sourceView if you pass that in. 如果传入,则可以设置barbutton而不是sourceView。
if let controller = viewCtrl {
controller.preferredContentSize = CGSizeMake(200,25)
controller.modalPresentationStyle = UIModalPresentationStyle.Popover
if let popover = controller.popoverPresentationController {
popover.delegate = self
popover.sourceView = viewCtrl.view
popover.sourceRect = CGRectMake(0,-5, 50, 50)
popover.permittedArrowDirections = .Any
self.presentViewController(controller, animated: true, completion: nil)
}
}
For best tutorial click here 有关最佳教程, 请单击此处
UIPopoverPresentationControllerDelegate
在viewController文件中添加UIPopoverPresentationControllerDelegate
@IBAction func onClickMenu(_ sender: UIButton)
{
if btnMenu.isSelected
{
btnMenu.setImage(UIImage(named: "arrow_orange"), for: UIControlState.normal)
btnMenu.isSelected = false
self.dismiss(animated: true, completion: nil)
}
else
{
btnMenu.setImage(UIImage(named: "up_arrow_orange"), for: UIControlState.normal)
btnMenu.isSelected = true
let popMenu = MenuViewController(nibName: "MenuViewController", bundle: nil)
popMenu.modalPresentationStyle = UIModalPresentationStyle.popover
popMenu.preferredContentSize = CGSize.init(width: 320, height: 265)
popMenu.vcPush = self
self.present(popMenu, animated: true, completion: nil)
let popController : UIPopoverPresentationController = popMenu.popoverPresentationController!
popController.permittedArrowDirections = UIPopoverArrowDirection.up
popController.delegate = self
//popController?.barButtonItem = nil
popController.sourceView = self.view
popController.sourceRect = CGRect.init(x: 525, y: 30, width: 10, height: 10)
}
}
For best tutorial click here 有关最佳教程, 请单击此处
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.