Convertir UIKeyboardFrameEndUserInfoKey à Vue ou de la Fenêtre Coordonnées
Pour la constante de UIKeyboardFrameEndUserInfoKey
, dans l'Apple docs il est dit:
Ces coordonnées ne tiennent pas compte de la rotation des facteurs
appliqué à la fenêtre du contenu en tant que résultat de l'orientation de l'interface
les changements. Ainsi, vous pouvez avoir besoin de convertir le rectangle de la fenêtre
coordonnées (à l'aide de la convertRect:fromWindow: méthode) ou pour afficher
coordonnées (à l'aide de la convertRect:fromView: méthode) avant de l'utiliser.
Donc, si j'utilise [view1 convertRect:rect fromView:view2]
Que ferais-je d'insertion pour les paramètres ci-dessus pour l'obtenir pour convertir les valeurs de rotation correctement? c'est à dire:
vue1 = ?
rect = ? (le clavier de l'image je suppose)
vue2 = ?
Été de tenter des choses et faire de drôles de trucs.
- Espérons que la réponse ci-dessous permet. J'ai déjà utilisé
convertRect
ainsi, mais le code ci-dessous est plus propre, de l'OMI. - Évidemment, je ne suis pas d'accord avec @Answerbot à ce qui est "propre" 🙂 BTW le code que j'show vient de mon livre, que vous aimeriez consulter sur ce sujet: apeth.com/iOSBook/...
- De bonnes choses. J'ai lu un de vos livres et vraiment apprécié. La raison que j'ai arrêté de l'utiliser à l'aide de
convertRect
est parce qu'il ne fonctionne vraiment bien à l'intérieur d'un view controller où vous avez unemyView
qui représente le premier point de vue. Si toutefois, vous êtes à l'écoute pour les notifications à partir de l'intérieur d'unUITextField
sous-classe, la transformation à l'aide de l'auto n'est pas particulièrement utile.
Vous devez vous connecter pour publier un commentaire.
La première vue devrait être votre point de vue. Le second point de vue devrait être nul, sens de la fenêtre/coordonnées de l'écran. Donc:
Maintenant, vous avez la rect que le clavier s'en occuper, en termes de votre point de vue. Si votre vue est le point de vue actuel du contrôleur de la vue (ou une sous-vue de celui-ci), de la rotation et ainsi de suite sont maintenant comptabilisés.
myView
représente la vue de la racine d'un point de vue contrôleur. Si ce n'est pas le cas et, au lieu de mavue est une sous-vue comme{100,100,200,200}
?J'ai essayé la accepté de répondre et a constaté qu'il ne fournit pas réellement le CGRect du clavier à l'intérieur de la vue. J'ai trouvé que je dois convertir le CGRect de la UIScreen objet de la UIWindow objet, et de la UIWindow objet de la UIView objet:
- Je utiliser pour redimensionner la vue de la racine pour ne pas être masqué par le clavier:
origin
valeurs de la viewRect pour le paysage (négatify
). Dans votre solution, vous pouvez utiliser uniquement leheight
. Est-ce que votreorigin
contenir corrigery
valeur?keyboardHeightEnd
deUIResponder.keyboardWillShowNotification
, comme suit:let rect = (notification.userInfo![UIResponder.keyboardFrameEndUserInfoKey]! as! NSValue).cgRectValue; let keyboardHeightEnd = view.convert(rect, from: nil).size.height
.UIView
méthode d'instanceconvert(_:from:)
) fonctionne correctement pour tous les appareils/balances. Si elle n'a pas, je sens que ce serait un UIKit bug.Peut être utilisé comme cela