1

Problem

I tried UISheetPresentationController example in Xcode13.0 beta.

And in order to handle the detent change event, I implemented the sheetPresentationConstructionSelectedDetentIdentifier(_:) method, but this method is not called when the size is changed by dragging.

Is this a bug in the Xcode beta? or is there anything wrong with my implementation?

Here is My code

class ModalViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        if let presentationController = presentationController as? UISheetPresentationController {
            presentationController.detents = [.medium(), .large()]
            presentationController.delegate = self
        }        
    }
}

extension ModalViewController: UISheetPresentationControllerDelegate {

    func sheetPresentationControllerDidChangeSelectedDetentIdentifier(_ sheetPresentationController: UISheetPresentationController) {
        /// not called
    }
}
Kazunori Takaishi
  • 2,268
  • 1
  • 15
  • 27

1 Answers1

1

Configure it this way and check if it works for you now:

class ViewController: UIViewController {
    
    override func viewDidLoad() {
        super.viewDidLoad()
    }
    
    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        
        let controller = SecondController()
        controller.transitioningDelegate = self
        controller.modalPresentationStyle = .custom
        self.present(controller, animated: true)
    }
}

extension ViewController: UIViewControllerTransitioningDelegate {
    func presentationController(forPresented presented: UIViewController, presenting: UIViewController?, source: UIViewController) -> UIPresentationController? {
        let controller = UISheetPresentationController(presentedViewController: presented, presenting: presenting)
        controller.detents = [.medium(), .large()]
        controller.delegate = self
        return controller
    }
}

extension ViewController: UISheetPresentationControllerDelegate {
    func sheetPresentationControllerDidChangeSelectedDetentIdentifier(_ sheetPresentationController: UISheetPresentationController) {
        print("Did Change Called!!!")
    }
}

class SecondController: UIViewController, UIViewControllerTransitioningDelegate {
    
    override func viewDidLoad() {
        super.viewDidLoad()
        self.view.backgroundColor = UIColor.blue
    }
}
RTXGamer
  • 3,215
  • 6
  • 20
  • 29