问题描述
问题
我在 UISheetPresentationController
中尝试了 Xcode13.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
}
}
解决方法
以这种方式配置它并检查它现在是否适合您:
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
}
}