我有一个自定义的动画 UIViewController 过渡,似乎 iOS 中有一个错误会破坏横向布局。在主要动画方法中,我得到了横向和纵向 View 的混合。 (纵向 View 都是纵向的,所以没问题。)
- (void)animateTransition:(id <UIViewControllerContextTransitioning>)transitionContext;
{
UIViewController* toViewController = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey];
UIViewController* fromViewController = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey];
UIView *containerView = [transitionContext containerView];
// fromViewController.view => landscape, transform
// toViewController.view => portrait, transform
// containerView => portrait, no transform
[containerView addSubview:toViewController.view];
// ...animation... //
}
我知道
frame
当 View 具有转换时,属性不可靠 - 所以我猜这是问题的根源。在横向模式下,to/from viewControllers View 具有 90 度顺时针变换 [0 -1 1 0]。我尝试使用 bounds/center 来调整 View 的大小和位置,以及移除变换然后重新应用它,但 UIKit 与我抗争并坚持将 View 显示为纵向。恼人的!在截图中,深灰色是 UIWindow 背景,红色是添加的模态视图 Controller ,应该覆盖整个屏幕。
有人找到解决方法吗?
最佳答案
好的,修复非常简单:
将 toViewController 框架设置为容器 之前 将 View 添加到容器中。
toViewController.view.frame = containerView.frame;
[containerView addSubview:toViewController.view];
更新:仍然存在一个限制,因为您不知道框架的方向。它最初是纵向的,但是当它显示在屏幕上时会拉伸(stretch)成横向。如果您想从右侧滑入 View ,在横向中它可能会从“顶部”滑入(如果查看其他景观,则可能从底部滑入!)
关于uiviewcontroller - 横向自定义 UIViewController 动画的解决方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20013929/