0 Replies
      Latest reply on Oct 8, 2019 1:25 PM by KaBlaize
      KaBlaize Level 1 Level 1 (0 points)

                 Hello guys,

         

        I've found an interesting issue which maybe my fault, but to fulfill the business requirements I needed to add SFSafariViewController as a child view controller.

         

        The problem is basically the left side of the screen is not responding for touch events. Its only 41 points wide but I've got a bug report about it, because half of the done button is not respond for touch events.

         

        You can see the view hierarchy here. _UIRemoteView has a few subviews on the left side of the screen which are blocking the half of the Done button.

        https://snipboard.io/ExMWYH.jpg

         

        The goal is to have Safari on the top of my VC before I even show this VC.

        I've made a test project to demonstrate it.

        It contains

        -  a ParentViewController class which is the first view controller in a navigation controller that the app displays.

        - and a ViewController class which push itself to parentVC's navigation controller (basically after a delay but it is not related to this problem)

         

        //  ParentViewController.swift
        import UIKit
        class ParentViewController: UIViewController {
            var sfTestVc: ViewController!
            override func viewDidAppear(_ animated: Bool) {
                super.viewDidAppear(animated)
                sfTestVc = ViewController()
                sfTestVc.testParent = self
                sfTestVc.delayedLoad()
            }
        }
        
        //  ViewController.swift
        import UIKit
        import SafariServices
        import WebKit
        import SnapKit
        
        class ViewController: UIViewController {
            func delayedLoad() {
        //        DispatchQueue.main.asyncAfter(deadline: .now() + .milliseconds(400)) {
                    self.openSafari()
        //        }
            }
        
            func openSafari() {
                let url = URL(string: "https://apple.com")!
                safari = SFSafariViewController(url: url)
                safari.delegate = self
                self.view.addSubview(safari.view)
                self.addChild(safari)
        //        safari.view.frame = self.view.bounds
        //        safari.view.autoresizingMask = [.flexibleHeight, .flexibleWidth]
        //        safari.view.autoresizesSubviews = true
        
                safari.didMove(toParent: self)
                safari.view.snp.makeConstraints{ (make) -> Void in
                    make.edges.equalTo(self.view)
                }
                // calling delegate about this happend and push this viewcontroller in successVC's navi controller
                self.testParent.navigationController?.pushViewController(self, animated: true)
            }
        
        
        }
        
        extension ViewController: SFSafariViewControllerDelegate {
        
        }
        
        
        

         

        Do you have any suggestions?

        I really want to have safari on the top of my viewController before I start to display my view controller