【问题标题】:UINavigationController modalPresentationStyle not working on iPhonesUINavigationController modalPresentationStyle 在 iPhone 上不起作用
【发布时间】:2021-08-26 06:38:26
【问题描述】:

我正在尝试使用以下方式将 UINavigationController 呈现为一个小窗口。它在 iPad 上运行良好,但在 iPhone 上仍显示全屏。任何关于我做错的提示将不胜感激!

class LoginNewNavigationController: UINavigationController{
    
    private var windowSize: CGSize!
    
    init() {
        let rootVc = LoginNewIPadViewController.init()
        super.init(rootViewController: rootVc)
        
        self.configureSizes()
        self.preferredContentSize = self.windowSize
        self.modalPresentationStyle = .formSheet
        self.showNavigationBar = false
        self.view.backgroundColor = .clear
        self.view.layer.cornerRadius = 25
    }
}

【问题讨论】:

    标签: ios swift uinavigationcontroller uimodalpresentationstyle


    【解决方案1】:

    iPhone 没有内置“小窗口”演示。您需要一个自定义的展示控制器来指定展示的视图控制器的较小尺寸和位置。

    【讨论】:

    • 我想将 UINavigationController 呈现为一个小窗口。
    • 那么您不需要表单。你需要一个自定义的演示控制器。
    • 查看我的github.com/mattneub/custom-alert-view-iOS7 以了解如何编写这样的东西。
    【解决方案2】:

    在 iPhone 上使用formSheet 是不可能的,可以使用.popover 样式来实现。请参阅以下示例 -

    class LoginNewIPadViewController: UIViewController {}
    
    class LoginNewNavigationController: UINavigationController {
        
        private var windowSize: CGSize!
        
        init() {
            let rootVC = LoginNewIPadViewController.init()
            super.init(rootViewController: rootVC)
            
            self.preferredContentSize = self.windowSize
            self.modalPresentationStyle = .popover
            
            if let presentationController = self.popoverPresentationController {
                /// Configure the way you want this to be shown
                // presentationController.sourceRect = ??
                // presentationController.sourceView = ??
                // presentationController.barButtonItem = ??
                presentationController.permittedArrowDirections = .up
                presentationController.delegate = self
            }
        }
        
    }
    
    extension LoginNewNavigationController: UIPopoverPresentationControllerDelegate {
        func adaptivePresentationStyle(for controller: UIPresentationController) -> UIModalPresentationStyle {
            return .none
        }
    }
    

    【讨论】:

      【解决方案3】:

      是 LoginnewiPadViewController 需要设置它的模态表示样式,而不是导航控制器。也不需要引用self,编译器的范围是明确的。

      class LoginNewNavigationController: UINavigationController{
      
      private var windowSize: CGSize!
      
          init() {
              let rootVc = LoginNewIPadViewController.init()
              rootVc.modalPresentationStyle = .formSheet
              super.init(rootViewController: rootVc)
              configureSizes()
              preferredContentSize = windowSize
              showNavigationBar = false
              view.backgroundColor = .clear
              view.layer.cornerRadius = 25
          }
      }
      

      【讨论】:

      • 我想将 UINavigationController 呈现为一个小窗口。这个不行。
      猜你喜欢
      • 2013-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-07
      • 2011-04-18
      • 1970-01-01
      相关资源
      最近更新 更多