Automatiquement Dimensionnement UIView après l'Ajout de la Fenêtre
Remarque: Cela peut être un doublon de Sous-vue Ne marche pas AutoSize Lorsqu'il est Ajouté à la Racine de la Vue-Contrôleur
J'ai une application pour iPad qui permet de commuter entre les différents points de vue dans la fenêtre principale. Le point de vue de commutation de code ressemble à ceci:
- (void)switchToViewController:(UIViewController*)viewController {
if (currentViewController != viewController) {
[currentViewController.view removeFromSuperview];
currentViewController = viewController;
[window addSubview:viewController.view];
}
}
Le problème est que lorsque le nouveau point de vue (un UISplitView) s'affiche en mode paysage, il n'est pas de taille à remplir la totalité de la fenêtre. Il y a un grand vide noir de l'espace sur la droite. On dirait que la vue est à seulement 768 pixels de large, plutôt que de 1024 pixels de largeur du paysage de la fenêtre.
Si j'ai faites pivoter l'appareil pour le portrait et puis retour au paysage, à la vue des tailles de lui-même correctement.
Si l'appareil est en orientation portrait, tout fonctionne bien. Le UISplitView obtient également la taille adéquate si c'est le premier point de vue, je spectacle. Le problème se produit uniquement si je passe après un autre point de vue a été montré, dans le paysage.
Donc, est-il un moyen de forcer l'iPhone OS afin de redimensionner l'affichage après qu'il a été ajouté à la fenêtre?
J'ai essayé d'appeler sizeToFit
, et setNeedsLayout
. J'ai aussi essayé de paramétrage de l'affichage du bounds
de la fenêtre bounds
, et j'ai essayé de réglage de la frame
pour correspondre à la vue précédente de l'image.
Vous devez vous connecter pour publier un commentaire.
C'est tout à fait possible! 🙂
Vous pouvez consulter mon repo ici:
https://github.com/hfossli/AGWindowView
Il sera automatiquement toute rotation et framechanges de sorte que vous n'aurez pas à vous soucier de cela.
Si vous vous inquiétez à ce sujet, alors vous pouvez simplement couper et coller des parties les plus importantes
# 1 Ajouter une vue à la fenêtre
# 2 Ajout d'un écouteur et mettre à jour la vue
N'oubliez pas de retirer la notification à l'écoute
# 3 Faire le calcul
Bonne chance!
Cela fonctionne, mais il semble un peu hacky:
La fenêtre peut inclure d'autres éléments de l'INTERFACE utilisateur en plus de votre point de vue. Le 20 pixels de différence dans votre exemple, la hauteur de la barre d'état.
Ni fenêtre ni la rotation de l'écran. L'obtention de leurs cadres et de les utiliser pour une rotation de la vue ne fonctionnera que si vous avez activé la hauteur et la largeur.
Si vous utilisez un UIViewController, essayer de retourner OUI partir de cette méthode:
J'ai eu le même problème, mais je l'ai réparé avec cette ligne de code:
}
Vous devez ajouter le nouveau point de vue, puis supprimez l'ancien et le nouveau, puis ajouter le nouveau point de vue. Je ne sais pas pourquoi, mais ça fonctionne.
Fossli réponse est bonne pour l'iPad. Cependant, j'ai une application universelle, que j'avais besoin de soutien. Par conséquent, certains ajustements sont nécessaires.
Ajouter les éléments suivants à AppDelegate.h
Ajouter les éléments suivants à AppDelegate.m
Ajouter les éléments suivants à l'Utilitaire.h
Ajouter les éléments suivants à l'Utilitaire.m
Windows de iOS7 ont des comportements différents avec des fenêtres d'iOS8/9.
Clavier de la fenêtre de iOS7 et toutes les fenêtres de iOS8/9 toujours orientation correcte, & taille. De sorte que vous pouvez observateur de la taille des événements de modification et de mise à jour de l'image de votre point de vue.
Mais les autres fenêtres de iOS7 toujours garder le portrait de l'orientation et de la taille. Vous avez besoin de mise à jour de transformer de votre point de vue après la rotation.
Vous devez observateur UIApplicationWillChangeStatusBarorientationnotification et mise à jour de la taille de votre UIView comme ceci: