首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何创建像Apples这样的Popover ViewController

如何创建像Apples这样的Popover ViewController
EN

Stack Overflow用户
提问于 2020-05-07 11:54:12
回答 2查看 7.5K关注 0票数 3

如何在ViewController中创建这个popover iOS样式?我如何使它适合它的内容和不超过内容框架?

我试图将modalPresentation更改为.popover,但它只在iPad和macOS上工作,而在iPhone上只起作用,就像我尝试的那样。我希望有人能帮忙

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-05-07 12:23:49

您必须在ViewController演示文稿中显示一个新的.popover。

然后,您可以根据需要自定义呈现的视图控制器。

主视图控制器应该如下所示:

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
class PopoverContentController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    // Custom design&implementation
}
票数 9
EN

Stack Overflow用户

发布于 2020-05-07 13:49:12

这对我有用。这可能对你有帮助。

代码语言:javascript
运行
复制
      var dropDownView : DropDownView!

设置下拉视图

代码语言:javascript
运行
复制
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:-当前控制器的委托方法:打开下拉视图,点击查看更多的图标

代码语言:javascript
运行
复制
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
}
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61657140

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档