【问题标题】:UIPopoverPresentationController SwiftUIPopoverPresentationController Swift
【发布时间】:2017-05-03 14:00:34
【问题描述】:

我正在使用 Storyboards 和 AutoLayout。有 2 个场景,1 是我的主视图控制器,带有一个工具栏和几个 UIBarButtonItems,1 是一个 UIViewController,应该只显示一个 UILabel。当用户在我的主视图控制器中点击工具栏时,我会使用以下代码显示弹出框:

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)
}

视图被呈现,但没有子视图 (UILabel) 可见。当我设置故事板转场而不是从代码中进行弹出式演示时,也会发生同样的奇怪行为。但是,当我在 UINavigationController 上推送相同的视图时,一切都显示得很好。我错过了什么吗?

最好的问候, 奥利弗

【问题讨论】:

    标签: ios swift uipopovercontroller


    【解决方案1】:

    根据需要调整大小。 如果你传入,你可以设置 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)
            }
        }
    

    【讨论】:

      【解决方案2】:

      获取最佳教程click here

      • 为弹出菜单创建一个XIB和swift文件。 (例如 MenuViewController)
      • 为显示弹出菜单创建另一个 xib 或情节提要视图控制器文件。 (例如 ViewController)
      • 在viewController文件中添加UIPopoverPresentationControllerDelegate
      • 在 ViewController 中添加按钮并创建 IBAction 并编写以下代码。

      @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)
              }
          }
      

      获取最佳教程click here

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多