0

Voici un GIF montrant la question:Comment empêcher la barre d'état de disparaître avant que UIImagePickerController ne couvre tout l'écran?

enter image description here

Lors de la présentation d'un UIImagePickerController comme ceci:

self.present(imagePicker, animated: true, completion: nil)

la barre d'état disparaît avant que le sélecteur d'image est plein écran. Le problème que j'ai avec ceci est que comme la barre d'état disparaît dans un nuage de fumée, la barre de navigation saute en occupant le vide laissé par la barre d'état. Lorsque UIImagePickerController est fermé, la barre d'état s'affiche à sa place légitime.

Je ne suis pas en train de personnaliser la barre d'état, par défaut.

Y a-t-il un moyen d'empêcher UIStatusBar de disparaître, à tout le moins jusqu'à ce que l'animation soit terminée?

+0

Voulez-vous afficher la barre d'état sur l'écran de l'appareil photo? –

+0

Non, je ne veux pas la barre d'état lors de la prise de vue. Je veux juste qu'il reste en place pendant l'animation de présentation, au lieu de disparaître juste au début de l'animation. Je veux que la vue que j'ai avant de présenter 'UIImagePickerController' reste exactement la même (mon vc avec la barre d'état) et' UIImagePickerController' en plus de cela. –

+0

Ah ok, désolé je le comprends maintenant. C'est un comportement par défaut et il est également recommandé par les directives interface utilisateur d'Apple « Tenir compte cacher temporairement la barre d'état lors de l'affichage des médias en plein écran. Une barre d'état peut être source de distraction lorsque les utilisateurs essaient de se concentrer sur les médias. Masque temporairement ces éléments pour offrir une expérience plus immersive.L'application Photos, par exemple, masque la barre d'état et d'autres éléments d'interface lors de la navigation de photos en plein écran. " [1] https://developer.apple.com/ios/human-interface-guidelines/ui-bars/status-bars/ –

Répondre

1

Si vous souhaitez que votre barre d'état reste en haut de l'écran, vous devez créer une fenêtre personnalisée et appliquer des animations manuellement. Cela peut aider:

var newWindow = UIWindow() 
let newController = viewControllerToPresent() 
var animationDuration = 0.4 // or whatever you want. 
// setting newController as root of new window. 
self.window.rootViewController = newController 
self.window.windowLevel = UIWindowLevelStatusBar 
self.window.backgroundColor = .clear 
self.window.frame = CGRect(x: 0, y: UIScreen.main.bounds.height, width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height) 
self.window.isHidden = false 

UIView.animate(withDuration: animationDuration) { 
    self.window.frame = CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height) 
}