1

问题

UISheetPresentationControllerXcode13.0 beta.

并且为了处理detent change事件,我实现了该sheetPresentationConstructionSelectedDetentIdentifier(_:)方法,但是通过拖动改变大小时不会调用该方法

这是一个错误Xcode beta吗?还是我的实施有什么问题?

这是我的代码

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
    }
}
4

1 回答 1

0

以这种方式配置它并检查它现在是否适合您:

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
    }
}
于 2021-06-30T18:29:54.163 回答