【问题标题】:How to create a Popover ViewController like Apples one如何创建一个像 Apples 一样的 Popover ViewController
【发布时间】:2020-08-22 17:03:42
【问题描述】:

如何在 iOS 中创建这种弹出框ViewController 样式?我怎样才能使它适合它的内容并且不超过内容框架?

我尝试将modalPresentation 更改为.popover,但据我尝试,它仅适用于 iPad 和 macOS,而不适用于 iPhone。希望有人能帮忙

【问题讨论】:

    标签: ios swift iphone xcode uiviewcontroller


    【解决方案1】:

    您必须在 .popover 演示文稿中呈现一个新的 ViewController。
    然后您可以根据需要自定义呈现的视图控制器。
    主视图控制器应如下所示:

    class ViewController: UIViewController {
    
        @IBAction func buttonClicked(_ sender: Any) {
            //get the button frame
            /* 1 */
            let button = sender as? UIButton
            let buttonFrame = button?.frame ?? CGRect.zero
    
            /* 2 */
            //Configure the presentation controller
            let popoverContentController = self.storyboard?.instantiateViewController(withIdentifier: "PopoverContentController") as? PopoverContentController
            popoverContentController?.modalPresentationStyle = .popover
    
            /* 3 */
            // Present popover
            if let popoverPresentationController = popoverContentController?.popoverPresentationController {
                popoverPresentationController.permittedArrowDirections = .up
                popoverPresentationController.sourceView = self.view
                popoverPresentationController.sourceRect = buttonFrame
                popoverPresentationController.delegate = self
                if let popoverController = popoverContentController {
                    present(popoverController, animated: true, completion: nil)
                }
            }
        }
    }
    
    extension ViewController: UIPopoverPresentationControllerDelegate {
    
        func adaptivePresentationStyle(for controller: UIPresentationController) -> UIModalPresentationStyle {
            return .none
        }
    
        func popoverPresentationControllerDidDismissPopover(_ popoverPresentationController: UIPopoverPresentationController) {
    
        }
    
        func popoverPresentationControllerShouldDismissPopover(_ popoverPresentationController: UIPopoverPresentationController) -> Bool {
            return true
        }
    }
    

    PopoverContentController 例如,您将在其中添加 TableView

    class PopoverContentController: UIViewController {
    
        override func viewDidLoad() {
            super.viewDidLoad()
        }
    
        // Custom design&implementation
    }
    

    【讨论】:

      【解决方案2】:

      这对我有用。这可能会对您有所帮助。

            var dropDownView : DropDownView!
      

      设置下拉视图

      dropDownView = Storyboard.Main.instantiateViewController(withIdentifier: "DropDownView") as? DropDownView
          self.dropDownView.delegate = self       
          self.dropDownView?.preferredContentSize = CGSize(width: 200, height: CGFloat((dropDownView.listArr.count) * 35))
          let presentationController = AlwaysPresentAsPopover.configurePresentation(forController: self.dropDownView!)
          presentationController.sourceView = sender
          presentationController.sourceRect = sender.bounds
          presentationController.permittedArrowDirections = [.down, .up]
          self.present(self.dropDownView!, animated: true)
      

      //MARK:- 当前控制器的委托方法:点击查看更多图标打开下拉视图

      class AlwaysPresentAsPopover : NSObject, UIPopoverPresentationControllerDelegate {    
      private static let sharedInstance = AlwaysPresentAsPopover()
      
      private override init() {
          super.init()
      }
      func adaptivePresentationStyle(for controller: UIPresentationController) -> UIModalPresentationStyle {
          return .none
      }
      static func configurePresentation(forController controller : UIViewController) -> UIPopoverPresentationController {
          controller.modalPresentationStyle = .popover
          let presentationController = controller.presentationController as! UIPopoverPresentationController
          presentationController.delegate = AlwaysPresentAsPopover.sharedInstance
          return presentationController
      }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-10-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-08
        相关资源
        最近更新 更多