iPad personnalisée taille de modal-vue-contrôleur
J'ai un couple de modal vue contrôleurs de certaine taille. J'essaie d'éviter l'utilisation de vues personnalisées (création en plein écran noir translucide superposition sur affichage actuel, ajouter la modale de vue sur ce point de vue, ne les animations, etc) pour le présenter car il n'est pas modalPresentationStyle qui s'adapte à la taille de mes contrôleurs.
Maintenant, je suis en utilisant UIModalPresentationPageSheet mais de mon point de vue est plus petit en hauteur et j'ai une vilaine espace vide
Présentation souhaitée
_______________
| _______ |
| | | |
| | MyVC | |
| | | |
| ------- |
---------------
Présentation
_______________
| | | |
| | MyVC | |
| | | |
| |-------| |
| | blank | |
---------------
Si j'utilise le UIModalPresentationFormSheet le conteneur est plus petit en largeur.
Je suis à essayer de comprendre comment faire, mais je ne sais pas si c'est possible. Quelle est la solution au problème de la présentation d'un modal VC plus petit que n'importe quel presentationStyles? La seule solution est d'organiser une "custom modal-vue-contrôleur de moteur"? Popovers ne convient pas à mes exigences de conception 🙁
- Il serait bien de vous faire accepter une bonne réponse à votre question en cliquant sur le gris de la coche à côté de lui.
Vous devez vous connecter pour publier un commentaire.
Que certains utilisateurs d'autres ici, j'ai aussi eu le problème de l'origine de l'modal-vue-contrôleur n'était pas correcte. Après quelques expériences, j'ai trouvé une solution qui a fonctionné pour moi:
willLayoutSubviews
vous devez ajouterif( CGRectIsEmpty( myRect ) ) { myRect = CGRectMake( 0, 0, <width>, <height> ); ) } self.view.superview.bounds = myRect;
viewWillLayoutSubviews
est appelée à chaque fois que vous mettez à jour le superview, de sorte que des choses étranges se passera si vous essayez de redimensionner plus souvent que sur la vue initiale de la charge.viewWillTransitionToSize:withTransitionCoordinator:
de la même manière queviewWillLayoutSubviews
et voir si cela aide à la rotation..preferredContentSize
fonctionne comme prévu pour moi.J'ai obtenu le résultat suivant (texte du lien) à l'aide de:
et en le présentant comme un modal-vue-contrôleur. Laissez-moi savoir si vous avez besoin de plus d'aide.
self
modale de VC, ou de la présentation de VC? Essayer les deux ne fonctionne pas pour moi.Toutes ces réponses ne fonctionnera pas sur ios8 SDK.
Cela fonctionne:
Dans AboutViewController.m
IS_IOS8
Dans iOS 8, vous pouvez également utiliser UIPresentationController qui vous donne plus d'options de personnalisation.
J'ai eu un problème à obtenir la taille personnalisée modal vers le centre jusqu'à ce que j'ai compris ce
ViewController.view.superview.frame
a été fixé initialement. Il est déterminé en fonction de la UIModalPresentation type.superview.center
n'est même pas nécessaire(dans la mesure de mes tests montre).Aussi, j'ai mis les coordonnées de manière dynamique à l'aide de
[UIScreen mainScreen].applicationFrame
, seulement soutenir l'orientation paysage pour l'instant. Que vous avez à faire un contrôle conditionnel pour soutenir à la fois portrait et paysage en basculant le X/Y et la Hauteur/Largeur de valeurs.C'était ma première solution de travail pour iOS 6.0:
Et puis j'ai regardé à la réponse précédente et tapisse la face. Raccourcit ma solution un peu en remplaçant la dernière ligne avec:
MODIFIER pour la solution finale et remarques.
La meilleure façon de le faire est de modifier les limites de la propriété sur le superview de la vue à l'intérieur de la formsheet. Lorsque vous présentez un point de vue modal, la vue est incorporé à l'intérieur d'un autre point de vue.
Vous devez définir les limites de la propriété de la superview à la même rect comme le point de vue de limites. Tout d'abord ajouter un privé ivar dans votre classe:
Il est préférable de le faire dans
viewWillAppear:
. Ajoutez le code suivant à la vue-contrôleur, qui est présenté sous forme modale:Vous avez besoin de cache
_realBounds
dans votreviewDidLoad
méthode:self.view.center
ouself.view.superview.center
.C'est ma solution pour une mise en page automatique de la vue (jamais essayé avec mise en page automatique) et compatible avec iOS 7 et iOS 8.
Au premier abord, assurez-vous d'appeler le modal vue de cette façon:
Avec iOS 8 définissez les preferredContentSize dans la méthode viewDidLoad modes de vue.
Cela fonctionne ÉGALEMENT lorsque le modal doit afficher le clavier sur iPad.
Avec les versions précédentes d'iOS 8, vous devez définir les limites après le presentViewController appel:
même pour la réduction de la forma feuille de hauteur et de largeur, vous pouvez utiliser
Les approches décrites ci-dessus ont besoin d'être modifié pour iOS7:
(Ce code fonctionne aussi sur iOS6.)
Même j'ai été aux prises avec le même problème pour un certain temps. Après avoir donné quelques essais de beaucoup de réponses ici, je suis venu avec une solution qui a fonctionné pour moi assez bien.
Voici le code tout en présentant le point de vue du contrôleur.
Dans le xib (si vous en utilisez un) dans la Simulées des Métriques de la section "sélectionnez" Libre " taille.
En dehors de cela, vous devez écrire le code ci-dessous dans votre présentés vue-contrôleur (j'.e.., SomeViewController dans cet exemple)
}
Ce code fonctionne aussi pour iOS 7 ainsi
Une solution consiste à utiliser UIModalPresentationPageSheet de présenter une page de la feuille, puis immédiatement à redimensionner modes de vue. Ceci est bien expliqué dans cette réponse à une autre question.
Redimensionner modale de vue "après", il est présenté à l'aide presentModalViewController méthode.Voir ce lien pour redimensionner modal Vue https://coderwall.com/p/vebqaq
Vous pouvez utiliser MZFormSheetController comme ceci:
Cette solution a fonctionné pour moi car j'ai eu le même problème.
Mon modale de vue de la structure est la suivante (j'utilise UIModalPresentationCurrentContext à la fois la présentation et présenté les contrôleurs pour assurer la transparence dans le VC)
Dans ModalViewController je écrasait la méthode suivante pour résoudre le problème de positionnement:
J'ai fait de créer et de taille de l'affichage du contenu de la première, mais dans différentes méthode.
Espère que cela aide quelqu'un.