UIScrollView n'utilise pas les contraintes de mise en page automatique
J'ai un parchemin et un affichage de l'image derrière elle et je suis le remplissant avec les plumes. Je suis en utilisant la mise en page automatique. J'ai un espace inférieur à superview et un espace de superview sur les deux points de vue. L'affichage de l'image est exactement ce que je veux faire. Pour l'iphone 5 c'est où je veux. Et pour les autres iphones, il reste au-dessus de la partie inférieure de l'écran, de sorte qu'il redimensionne correctement. Le défilement de l'affichage ressemble à droite sur l'iphone 5, mais sur les autres téléphones, il n'est pas redimensionnée, de sorte qu'il se défile vers le bas ci-dessous le point de vue de l'application. Je reçois ces messages dans le journal:
2012-11-21 10:42:38.576 LCHApp[12604:907] Unable to simultaneously satisfy constraints.
Probably at least one of the constraints in the following list is one you don't want.
Try this: (1) look at each constraint and try to figure out which you don't expect;
(2) find the code that added the unwanted constraint or constraints and fix it.
(Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer
to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints)
"<NSLayoutConstraint:0x1d8ea080 UIScrollView:0x1d8413b0.bottom == UIImageView:0x1d892110.bottom>",
"<NSAutoresizingMaskLayoutConstraint:0x1d8cca10 h=-&- v=-&- ScheduleViewNib:0x1d853630.height == UIScrollView:0x1d8413b0.height - 386>",
"<NSLayoutConstraint:0x1d8e5340 V:[UIImageView:0x1d892110]-(64)-| (Names: '|':ScheduleView:0x1d8efc30 )>",
"<NSAutoresizingMaskLayoutConstraint:0x1d8cf520 h=--& v=--& V:[ScheduleView:0x1d8efc30(480)]>",
"<NSLayoutConstraint:0x1d8eaed0 V:|-(45)-[UIScrollView:0x1d8413b0] (Names: '|':ScheduleView:0x1d8efc30 )>"
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x1d8ea080 UIScrollView:0x1d8413b0.bottom == UIImageView:0x1d892110.bottom>
J'ai déjà essayé
[self setTranslatesAutoresizingMaskIntoConstraints:YES];
et
[self.myScrollView setTranslatesAutoresizingMaskIntoConstraints:YES];
De ce que je peux voir que cela prend juste hors de toutes les contraintes de la vue. Et ce n'est pas ce que je veux.
- Apple Note Technique TN2154: UIScrollView Et de mise en page automatique couvre cette question en détail.
Vous devez vous connecter pour publier un commentaire.
La relation entre UIScrollView et de mise en page automatique est différent des autres aspects de la mise en page automatique. En gros, si simple mise en page automatique ont été autorisés à opérer, rien de défilement. Par exemple, si une sous-vue de défilement de la vue ont été épinglés dans la voie normale par une contrainte de 10 points à partir du haut de défilement de la vue, il serait absolument épinglé là; il ne déplacez jamais, quel que soit le mode de défilement de la vue ont été défile.
Pour résoudre ce problème, un UIScrollView qui utilise la mise en page automatique fonctionne d'une manière complètement nouvelle. Donc quand vous dites "je suis en utilisant la mise en forme automatique" vous devez préparer pour que les choses fonctionnent très différemment d'avant. Vous devez utiliser un unique de défilement de la vue sous-vue avec
translatesAutoresizingMaskIntoConstraints = YES
, et un contenu explicite de la taille ou de l'autre tout doit avoirtranslatesAutoresizingMaskIntoConstraints = NO
et la taille du contenu sera déduit implicitement basée sur les contraintes de la sous-vues.C'est très bien expliqué dans https://developer.apple.com/library/content/releasenotes/General/RN-iOSSDK-6_0/index.html
constraintsWithVisualFormat:options:metrics:views:
mal). Toujours utiliser le vrai code qui fonctionne réellement. Et d'ailleurs, dans un projet réel, vous pouvez inclure une image réelle. La Pomme de personnes n'ont pas d'imagination et peu de temps; vous devez faire tout le travail pour eux à l'avance.Très important lors de l'utilisation de l'auto-mise en page: vous devez épingler le droit et/ou en bas de la dernière sous-vue vers la droite et/ou en bas de défilement de la vue. De cette façon, le défilement de la vue connaît la taille du contenu. Par exemple:
Mes remerciements à ce site pour fournir le parfait exemple.
J'ai perdu des heures à cause de cela, et j'espère que d'autres personnes de ma douleur.
Pour obtenir UIScrollviews fonctionner bien avec des contraintes, j'ai utiliser cette approche a répondu ici. Dans cette réponse, j'lutter contre comment obtenir un verticalement défilement scrollview de travail qui fonctionne aussi avec dispositif de rotation. Vous pouvez modifier l'approche pour travailler avec des horizontalement défilement scrollviews trop. Pour scrollviews qui défilent dans les deux directions, ne pas ajouter la taille correspondant largeur contrainte truc. Mais faire tout de même.
Un couple de choses.
Si ceux-ci sont fait à droite, vous pouvez maintenant mise en page de votre bouton et il sera parfait. Voici comment.
Cette erreur indique que votre plume ou un contrôle à l'intérieur de cette plume n'est PAS à l'aide de mise en page automatique.