在 iOS 15 中 Apple 推出了 UISheetPresentationController,通過(guò)它可以控制 Modal 出來(lái)的 UIViewController 的顯示大小,且可以通過(guò)手勢(shì)在不同大小之間進(jìn)行切換。在 iOS 16 中,Modal 出來(lái)的 UIViewController 可以自定義顯示的大小。
// Created by YungFan
import UIKit
extension UISheetPresentationController.Detent.Identifier {
static let small = UISheetPresentationController.Detent.Identifier("small")
}
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
let modalViewController = ModalViewController()
// 設(shè)置UISheetPresentationController
if let sheet = modalViewController.sheetPresentationController {
// 支持的自定義顯示大小
sheet.detents = [
.custom { _ in
200.0 // 固定大小
},
.custom(identifier: .small) { context in
0.1 * context.maximumDetentValue // 占上下文最大尺寸的0.1
},
.custom { context in //
0.5 * context.maximumDetentValue // 占上下文最大尺寸的0.5
},
.large()]
sheet.prefersGrabberVisible = true
}
present(modalViewController, animated: true)
}
}
class ModalViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .red
}
}