Для достижения этого вам нужно будет создать подкласс UIPresentationController и реализовать протокол UIViewControllerTransitioningDelegate в представляющем контроллере и установить transitioningDelegate и modalPresentationStyle представленного контроллера представления как самого себя (представление контроллера представления) и .custom соответственно. Реализуйте дополнительную функцию UIViewControllerTransitioningDelegate:
func presentationController(forPresented presented: UIViewController, presenting: UIViewController?, source _: UIViewController) -> UIPresentationController?
и верните пользовательский presentationController, который устанавливает высоту представляемого контроллера в соответствии с вашим требованием.
Базовый c код, который может помочь:
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, такие как добавление размытие фона , добавление нажмите функциональность и жест пальцем .