0

J'ai un écran dans mon application avec plusieurs contrôleurs de vue enfant. Sur les tailles d'écran plus petites comme l'iPhone, les contrôleurs de vue sont placés les uns contre les autres. Sur les tailles d'écran iPad, l'un des contrôleurs de vue flotte au-dessus de l'autre.Comment puis-je vérifier la classe de taille actuelle pour l'écran à partir d'un contrôleur de vue enfant imbriqué?

Je veux faire en sorte que mon contrôleur de vue qui flotte parfois n'a qu'un rayon de coin quand il flotte. Par conséquent, j'ai cherché à remplacer une méthode comme viewDidLoad ou overrideTraitCollection(forChildViewController:) dans mon contrôleur de vue enfant pour définir le rayon de coin de sa vue selon que sa classe de taille est wRegular, hRegular, qui est pour les iPad en mode portrait ou paysage. Toutefois, le contrôleur de vue enfant ne semble pas avoir les mêmes valeurs de classe de taille que le contrôleur de vue racine, et le déplacement de la hiérarchie parentViewController ne semble pas me diriger vers un contrôleur de vue qui possède ces valeurs. .

Comment accéder à la classe de taille actuelle du haut de la hiérarchie de vue à partir d'un contrôleur de vue enfant?

modifier: J'ai essayé la réponse existante en utilisant UIScreen, et cela fonctionne très bien lorsque mon application est la seule application visible. Toutefois, il en résulte un comportement incorrect lorsque l'application est exécutée en mode écran partagé: elle renvoie toujours Regular/Regular même si l'application est étroite. Existe-t-il une solution qui consiste à obtenir la classe de taille pour la partie de l'écran dans laquelle se trouve mon application?

+1

"Comment accéder à la classe de taille actuelle du haut de la hiérarchie de vues à partir d'un contrôleur de vue enfant?" Demandez à l'écran quelle est sa classe de taille. – matt

+0

C'était tout. Merci! –

+0

Voici un exemple de projet téléchargeable qui vous montre comment modifier l'environnement de caractères pour un enfant. https://github.com/mattneub/Programming-iOS-Book-Examples/blob/master/bk2ch06p321overrideTraitCollection/OverrideTraitCollection/ViewController.swift L'exemple fait exactement ce que vous décrivez: l'enfant se comporte différemment lorsque la collection de traits est différente (configuré dans le storyboard) – matt

Répondre

1

Vous aimez cette (ce qui est de Swift Current 3):

let tc = UIScreen.main.traitCollection 

Maintenant, vous pouvez interroger la classe de taille verticale et horizontale de tc.

+1

Bien que ce soit une option mais pas recommandé si vous prenez en charge le multitâche de l'iPad. – tzuer

+0

@ user3049050 Donc, l'écran ne donnera pas la bonne réponse pour cette application, lorsque nous sommes sous multitâche iPad? – matt

+0

Yep - UIScreen's traitCollection retourne régulier même redimensionné en multi-tâche. Recommandé pour obtenir celui de View Controller à la place. – tzuer