web-dev-qa-db-fra.com

barre d'état de chevauchement de la barre de navigation ios 11

Dans ios 11, la barre de navigation se chevauche. Si un organisme fait face au même problème, aidez-le avec bonté.

 enter image description here

7
Ashish

Pas sûr que ce soit le même problème, mais nous avons également rencontré ce problème lors de la mise à niveau vers iOS 11.

Voir La barre de navigation personnalisée pour ios 11 passe sous la barre d'état

Nous réglions manuellement la hauteur de la barre de navigation sur 64 et les fixions aux bords de la vue supérieure. Se conformer au protocole UINavigationBarDelegate et implémenter la méthode de délégué UIBarPositioningDelegate l’a résolu pour nous.

Ont été placées

navigationBar.autoPinEdgesToSuperviewEdgesExcludingEdge(.bottom)
navigationBar.autoSetDimension(.height, toSize: 64)

avec

...
  if #available(iOS 11.0, *) {
    navigationBar.topAnchor.constraint(
      equalTo: self.view.safeAreaLayoutGuide.topAnchor
    ).isActive = true
  } else {
    navigationBar.topAnchor.constraint(
      equalTo: topLayoutGuide.bottomAnchor
    ).isActive = true
  }
  navigationBar.autoPinEdge(toSuperviewEdge: .left)
  navigationBar.autoPinEdge(toSuperviewEdge: .right)
  navigationBar.delegate = self
...

public func position(for bar: UIBarPositioning) -> UIBarPosition
  return .topAttached
}

Ceci utilise le DSL purelayout pour certains des appels avec autolayout ( https://github.com/PureLayout/PureLayout )

Le crédit va à https://stackoverflow.com/users/341994/matt pour la réponse

1
Darren Cheng

Définissez la vue enfant sur la contrainte supérieure de la vue d'ensemble ... Cliquez pour modifier la contrainte Si "Aligner en haut sur: Zone de sécurité" s'affiche, remplacez-le par la vue supérieure afin qu'elle se chevauche.

0
Beyaz

Avait un problème similaire. Dans mon cas, il s'est avéré que le contrôleur de vue précédent avait une barre de navigation personnalisée et qu'il masquait donc les deux: barre de navigation et barre d'état. Il y avait

UIApplication.shared.setStatusBarHidden(true, with: UIStatusBarAnimation.none)
UIApplication.shared.setStatusBarStyle(.default, animated: false)

Et dans le contrôleur de vue problématique, j'avais ceci:

UIApplication.shared.setStatusBarStyle(.default, animated: false)
UIApplication.shared.setStatusBarHidden(false, with: UIStatusBarAnimation.none)

Le problème a été résolu simplement en plaçant les deux lignes dans le bon ordre:

UIApplication.shared.setStatusBarHidden(false, with: UIStatusBarAnimation.none)
UIApplication.shared.setStatusBarStyle(.default, animated: false)

Toutes les choses ci-dessus sont des déprécations, donc un autre correctif possible serait probablement de changer ceci en la manière recommandée de masquer la barre d'état (ce qui n'est pas encore idéal comme discuté ici: setStatusBarHidden obsolète, mais seulement ce qui fonctionne ).

0
Vitalii