J'ai un problème étrange avec le NavigationBar
derrière le Statusbar
.UINavigationBar ci-dessous StatusBar après Hotspot/Call lors de l'utilisation de la transition personnalisée
Cela ne se produit que lorsque la barre d'état par défaut est remplacée par une barre d'état "active" comme celle qui apparaît pendant un appel actif ou un hotspot wifi.
Avant la barre d'état "actif" apparaît, il ressemble à ceci (ce qui est parfaitement bien):
Lorsque j'activer le hotspot wifi, il est toujours très bien:
Mais quand je désactiver le hotspot wifi ou mettre fin à un appel, la taille de la barre d'état rétrécit à sa taille précédente, mais le ViewController
(dans ce cas un UITableViewController
) ne bouge pas p encore. On dirait qu'il a une marge supérieure de la taille des statusbars. En outre, la barre d'état est transparente et je peux voir l'arrière-plan du contrôleur de vue ci-dessous le contrôleur de vue de table réelle.
Toutes les idées sur cette question? Je me suis rendu compte que c'était à cause d'une transition modale personnalisée que j'avais implémentée.
Il doit s'agir d'une animation dissoudre. Ce est le code:
class DissolveTransition: NSObject, UIViewControllerAnimatedTransitioning, UIViewControllerTransitioningDelegate {
// vars
private var duration: NSTimeInterval = 0.3
private var presenting = true
// MARK: - UIViewControllerAnimatedTransitioning
func transitionDuration(transitionContext: UIViewControllerContextTransitioning?) -> NSTimeInterval {
return self.duration
}
func animateTransition(transitionContext: UIViewControllerContextTransitioning) {
let destination = transitionContext.viewControllerForKey(UITransitionContextToViewControllerKey)
if (destination?.isBeingPresented() == true) {
self.animatePresentation(transitionContext)
}
else {
self.animateDismissal(transitionContext)
}
}
private func animatePresentation(transitionContext: UIViewControllerContextTransitioning) {
self.animateDissolve(transitionContext)
}
private func animateDismissal(transitionContext: UIViewControllerContextTransitioning) {
self.presenting = false
self.animateDissolve(transitionContext)
}
private func animateDissolve(transitionContext: UIViewControllerContextTransitioning) {
let source = transitionContext.viewControllerForKey(UITransitionContextFromViewControllerKey)!
let destination = transitionContext.viewControllerForKey(UITransitionContextToViewControllerKey)!
let container = transitionContext.containerView()!
destination.beginAppearanceTransition(true, animated: true)
let snapshotFromView = source.view.snapshotViewAfterScreenUpdates(true)
// 1. adding real view at the bottom of the view hierarchy
if (self.presenting) {
container.addSubview(destination.view)
}
// 2. adding snapshot of previous view to view hierarchy
container.addSubview(snapshotFromView)
// 3. removing (fade) prev snapshot view and show real VC
UIView.animateWithDuration(self.duration, animations: {
snapshotFromView.alpha = 0.0
}, completion: { (finished) in
if (finished) {
snapshotFromView.removeFromSuperview()
container.bringSubviewToFront(destination.view)
}
transitionContext.completeTransition(!transitionContext.transitionWasCancelled())
destination.endAppearanceTransition()
})
}
// MARK: - UIViewControllerTransitioningDelegate
func animationControllerForPresentedController(presented: UIViewController, presentingController presenting: UIViewController, sourceController source: UIViewController) -> UIViewControllerAnimatedTransitioning? {
return self
}
func animationControllerForDismissedController(dismissed: UIViewController) -> UIViewControllerAnimatedTransitioning? {
return self
}
}
est-il que sur ce contrôleur se produisant en particulier? Implémentez-vous un code spécial lié à la barre d'état du contrôleur, comme 'prefersStatusBarHidden',' preferredStatusBarStyle' ou 'preferredStatusBarAnimation'? Avez-vous un code à barres d'état dans le délégué de l'application? Tout ce qui se rapporte à la barre d'état dans info.plist? – Kumuluzz
@Kumuluzz Non, rien. Aucune personnalisation de statusBar 'appearance', pas de' preferredStatusBarStyle', rien ... La seule chose qui me vient à l'esprit est une transition de vue modale personnalisée qui présente ce viewcontroller. Mais il se produit également dans tous les autres viewcontroller _after_ celui-ci. Pourrait-il être la transition personnalisée? – Chris