I've been using the following code snippet to achieve the effect of presenting a view controller on only half of the screen:
func showPlayerView() {
let controller = storyboard!.instantiateViewController(withIdentifier: "playerViewController") as! PlayerViewController
controller.player = self.player
controller.providesPresentationContextTransitionStyle = true
controller.definesPresentationContext = true
controller.transitioningDelegate = self
self.present(controller, animated: true, completion: nil)
}
extension ViewController : UIViewControllerTransitioningDelegate
{
func presentationController(forPresented presented: UIViewController, presenting: UIViewController?, source: UIViewController) -> UIPresentationController? {
if presented is PlayerViewController {
return HalfSizePresentationController(presentedViewController: presented, presenting: presenting)
}
return nil
}
func animationController(forPresented presented: UIViewController, presenting: UIViewController, source: UIViewController) -> UIViewControllerAnimatedTransitioning? {
return animator
}
func animationController(forDismissed dismissed: UIViewController) -> UIViewControllerAnimatedTransitioning? {
return animator
}
}
class HalfSizePresentationController : UIPresentationController {
override var frameOfPresentedViewInContainerView: CGRect
{
get {
let height: CGFloat = 200
return CGRect(x: 0, y: UIScreen.main.bounds.height - height, width: UIScreen.main.bounds.width, height: 200)
}
}
}
This used to work on tvOS 13, but now since tvOS 14 what I get is this:
Any idea how this can be achieved on iOS 14?