Swift uses the runtime method to globally solve the problem of modal attempts not to be displayed in full screen

extension UIViewController{
    
    
   class func loadMethodSwizzing(){
    
    
        let originalSelector = #selector(UIViewController.present(_:animated:completion:))
        let swizzledSelector = #selector(UIViewController.my_present(_:animated:completion:))
        let originalMethod = class_getInstanceMethod(self, originalSelector)
            let swizzledMethod = class_getInstanceMethod(self, swizzledSelector)
            //在进行 Swizzling 的时候,需要用 class_addMethod 先进行判断一下原有类中是否有要替换方法的实现
            let didAddMethod: Bool = class_addMethod(self, originalSelector, method_getImplementation(swizzledMethod!), method_getTypeEncoding(swizzledMethod!))
            //如果 class_addMethod 返回 yes,说明当前类中没有要替换方法的实现,所以需要在父类中查找,这时候就用到 method_getImplemetation 去获取 class_getInstanceMethod 里面的方法实现,然后再进行 class_replaceMethod 来实现 Method Swizzing
           if didAddMethod {
    
    
                class_replaceMethod(self, swizzledSelector, method_getImplementation(originalMethod!), method_getTypeEncoding(originalMethod!))
            } else {
    
    
                method_exchangeImplementations(originalMethod!, swizzledMethod!)
            }
        }
     @objc func my_present(_ vc:UIViewController,animated: Bool,completion:(()->())?) {
    
    
         vc.modalPresentationStyle = .fullScreen
         self.my_present(vc, animated: animated, completion: completion)
     }
    
}

Instructions:

//在这个方法中调用下
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool{
    
    
        UIViewController.loadMethodSwizzing() //交换方法
        initWindow()
        return true
    }
   let vc = VideoPlayerController()
   self.present(vc, animated: true) {
    
    
            print("跳转到视频界面")
   }

With reference to this article, thanks to the author for sharing Click view , I have made some extensions myself

Guess you like

Origin blog.csdn.net/weixin_43259805/article/details/123497133