使用自定义动画时 iOS9 上的 edgesForExtendedLayout 被忽略
edgesForExtendedLayout ignored on iOS9 when using custom animation
iOS9 在使用 UIViewControllerAnimatedTransitioning
实现自定义动画时似乎忽略了目标视图控制器的 edgesForExtendedLayout
,因此内容最终位于导航栏下方。知道为什么会这样吗?
我在 https://github.com/nmarkovic04/CustomAnimationTest 上托管了一个示例。 运行 它在 8.4 和 9.1 上显示出差异,但您很可能可以尝试任何其他 8.x 和 9.x 版本。
运行 XCode 7,Swift 2.0。
只需设置此:
self.edgesForExtendedLayout = UIRectEdgeTop;
为我解决了这个问题。
ViewDidLoad 中的这个修复了它你能确认一下吗:]
self.edgesForExtendedLayout = .Top
self.extendedLayoutIncludesOpaqueBars = true
我知道这很糟糕,但在 viewDidLoad() 中我解决了这个问题:
var frame = self.view.frame
frame.origin.y = 64 //The height of status bar + navigation bar
self.view.frame = frame
对我来说,第一次看到我的视图控制器时,问题就出现了,当我旋转设备时,问题就消失了。
您必须正确设置 toViewController 的框架。 transitionContext.finalFrame(for:)
会帮助你。这是我用于淡入淡出 in/out 动画的 animateTransition(using:) 函数。一行设置框架也将修复您的共享项目。
func animateTransition(using transitionContext: UIViewControllerContextTransitioning) {
if let toViewController = transitionContext.viewController(forKey: .to) {
transitionContext.containerView.addSubview(toViewController.view)
toViewController.view.frame = transitionContext.finalFrame(for: toViewController)
toViewController.view.alpha = 0.0
UIView.animate(withDuration: 0.5,
animations: {
toViewController.view.alpha = 1.0},
completion: { finished in
transitionContext.completeTransition(!transitionContext.transitionWasCancelled)})
}
}
iOS9 在使用 UIViewControllerAnimatedTransitioning
实现自定义动画时似乎忽略了目标视图控制器的 edgesForExtendedLayout
,因此内容最终位于导航栏下方。知道为什么会这样吗?
我在 https://github.com/nmarkovic04/CustomAnimationTest 上托管了一个示例。 运行 它在 8.4 和 9.1 上显示出差异,但您很可能可以尝试任何其他 8.x 和 9.x 版本。
运行 XCode 7,Swift 2.0。
只需设置此:
self.edgesForExtendedLayout = UIRectEdgeTop;
为我解决了这个问题。
ViewDidLoad 中的这个修复了它你能确认一下吗:]
self.edgesForExtendedLayout = .Top
self.extendedLayoutIncludesOpaqueBars = true
我知道这很糟糕,但在 viewDidLoad() 中我解决了这个问题:
var frame = self.view.frame
frame.origin.y = 64 //The height of status bar + navigation bar
self.view.frame = frame
对我来说,第一次看到我的视图控制器时,问题就出现了,当我旋转设备时,问题就消失了。
您必须正确设置 toViewController 的框架。 transitionContext.finalFrame(for:)
会帮助你。这是我用于淡入淡出 in/out 动画的 animateTransition(using:) 函数。一行设置框架也将修复您的共享项目。
func animateTransition(using transitionContext: UIViewControllerContextTransitioning) {
if let toViewController = transitionContext.viewController(forKey: .to) {
transitionContext.containerView.addSubview(toViewController.view)
toViewController.view.frame = transitionContext.finalFrame(for: toViewController)
toViewController.view.alpha = 0.0
UIView.animate(withDuration: 0.5,
animations: {
toViewController.view.alpha = 1.0},
completion: { finished in
transitionContext.completeTransition(!transitionContext.transitionWasCancelled)})
}
}