使用自定义animation时,会在iOS9上忽略edgesForExtendedLayout
当使用UIViewControllerAnimatedTransitioning
实现自定义animation时,iOS9似乎忽略了目标视图控制器的edgesForExtendedLayout
,因此内容会在导航栏下方结束。 任何想法为什么发生这种情况?
我已经在https://github.com/nmarkovic04/CustomAnimationTest举办了一个例子。 在8.4和9.1上运行它显示了不同之处,但是你很可能会尝试任何其他的8.x和9.x版本。
运行在Xcode 7,Swift 2.0上。
这在ViewDidLoad修复它,你可以确认请:]
self.edgesForExtendedLayout = .Top self.extendedLayoutIncludesOpaqueBars = true
只是设置这个:
self.edgesForExtendedLayout = UIRectEdgeTop;
为我解决了这个问题。
我知道这是可怕的,但在viewDidLoad()我解决了这个:
var frame = self.view.frame frame.origin.y = 64 //The height of status bar + navigation bar self.view.frame = frame
对我来说,第一次看到我的视图控制器出现问题,当我旋转设备的问题已经消失。
你必须设置适当的ViewController的框架。 transitionContext.finalFrame(for:)
将帮助你。 这是我的animateTransition(使用:)函数淡入/淡出animation。 这一行设置框架也将修复您的共享项目。
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)}) } }
- 使用AutoLayout,当导航栏消失时,如何将UILabel放在同一个地方?
- iOS 7.1 UitableviewCell内容与下面的内容重叠
- 首次出现时不能更改UITableViewCell中的UILabel的框架(使用Autolayout)
- 当我将UIPanGestureRecognizer和自动布局结合在一起时,我的UIViews变得糟糕透顶
- 在UITableViewCell的子视图上设置遮罩层将覆盖自动布局约束
- UIStackView里面的UITextview
- 为什么UITableViewCell具有自动布局约束冲突
- 无法将UILabel的Y位置与Autolayout“on”一起移动
- 为UIScrollView设置约束