iPhone XR,XS Max上的modalPresentationStyle formSheet问题

时间:2019-01-09 09:31:23

标签: ios ios-autolayout

我正在使用modalPresentationStyle = .formSheet显示模式UIViewController,但在iPhone XR和XS Max上存在一些问题。显示在缺口的后面。左侧iPhone XR,XS,X的图像波纹管。

enter image description here

UIViewController使用自动布局,并且显示如下:

let contentViewController = UINib(nibName: "EditViewController", bundle: nil).instantiate(withOwner: nil, options: nil)[0] as! EditViewController

let navController = UINavigationController(rootViewController: contentViewController)

navController.modalPresentationStyle = UIModalPresentationStyle.formSheet
let popover = navController.presentationController!
popover.delegate = self

self.present(navController, animated: true, completion: nil)

委托:

extension MyController: UIAdaptivePresentationControllerDelegate {

    func adaptivePresentationStyle(for controller: UIPresentationController, traitCollection: UITraitCollection) -> UIModalPresentationStyle {
        return .none
    }
}

modalPresentationStyle = .pageSheet也存在相同的问题。它可以与其他modalPresentationStyles(即全屏)配合使用

它在iOS 12.1上,迅捷3

有人知道如何解决此问题吗?谢谢

2 个答案:

答案 0 :(得分:1)

UIKit不支持。

在iPad上,唯一的可能性是sheet to full screenpage sheet to form sheet。如文档中所指定:

  

在水平紧凑的环境中,此选项的行为与UIModalPresentationFullScreen相同。

因此,UIKit已经对其进行了调整。

不幸的是,您将必须实现自己的自定义过渡控制器。

答案 1 :(得分:0)

正如GaétanZ所说,最好使用另一种模式表示样式(如overFullScreen)来处理紧凑的水平尺寸小节,而将formSheet留给水平规则的样式。

func adaptivePresentationStyle(for controller: UIPresentationController) -> UIModalPresentationStyle {
    if controller.traitCollection.horizontalSizeClass == .regular {
        return .formSheet
    }
    return .overFullScreen
 }