为了实现,您需要继承 UIPresentationController 并在呈现控制器中实现协议 UIViewControllerTransitioningDelegate 并将呈现视图控制器的transitioningDelegate和modalPresentationStyle分别设置为 self(呈现视图控制器)和 .custom。实现 UIViewControllerTransitioningDelegate 的一个可选功能:
func presentationController(forPresented presented: UIViewController, presenting: UIViewController?, source _: UIViewController) -> UIPresentationController?
并返回自定义的presentationController,它根据您的要求设置呈现控制器的高度。
可能有帮助的基本代码:
class CustomPresentationController: UIPresentationController {
var presentedViewHeight: CGFloat
init(presentedViewController: UIViewController, presenting presentingViewController: UIViewController?, presentedViewHeight: CGFloat) {
self.presentedViewHeight = presentedViewHeight
super.init(presentedViewController: presentedViewController, presenting: presentingViewController)
}
override var frameOfPresentedViewInContainerView: CGRect {
var frame: CGRect = .zero
frame.size = CGSize(width: containerView!.bounds.width, height: presentedViewHeight)
frame.origin.y = containerView!.frame.height - presentedViewHeight
return frame
}
}
可选功能的实现:
func presentationController(forPresented presented: UIViewController, presenting: UIViewController?, source _: UIViewController) -> UIPresentationController? {
let presentationController = CustomPresentationController(presentedViewController: presented, presenting: presenting, presentedViewHeight: 100)
return presentationController
}
您还可以使用其他可选功能并向 CustomPresentationController 添加一些其他功能,例如添加模糊背景、添加点击功能和滑动手势。