如何在iOS中创建此弹出框ViewController样式?我怎样才能使它适合它的内容,不超过内容框架?
ViewController
我试着把modalPresentation改成.popover,但它只能在iPad和macOS上工作,而不能在iPhone上工作。希望有人能帮忙
modalPresentation
.popover
wvyml7n51#
您必须在.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 }
8nuwlpux2#
这对我很有效。这可能对你有帮助。
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 } }
2条答案
按热度按时间wvyml7n51#
您必须在.popover演示文稿中呈现一个新的ViewController。
然后,您可以按照自己的意愿定制呈现的视图控制器。
主视图控制器应该如下所示:
PopoverContentController,例如,您将在其中添加TableView
8nuwlpux2#
这对我很有效。这可能对你有帮助。
设置下拉视图
//MARK:-当前控制器的委托方法:点击查看更多图标打开下拉视图