Quand va (ou ne va pas) updateViewConstraints être appelé sur mon point de vue contrôleur pour moi par le cadre?
J'ai un view controller et je veux craete et jeu de mon point de vue, les contraintes dans updateViewConstraints.
J'ai un point de rupture dans la méthode et il n'est jamais appelé.
Pourquoi ne serait-il pas appelé?
Quand le cadre de cette méthode sur mon point de vue, contrôleur?
OriginalL'auteur topwik | 2013-07-05
Vous devez vous connecter pour publier un commentaire.
updateViewConstraints
est appelé parviewWillLayoutSubviews
(par l'intermédiaire de votre vuelayoutSubviews
méthode en cours de route). Comme le nom l'indique, il est appelé à chaque fois que votre point de vue contrôleur doit mettre à jour sa disposition.Si vous trouver que
updateViewConstraints
est jamais appelés alors vous devriez assurez-vous que vous appelezsuper
votre point de vue du contrôleur de méthodes si nécessaire.Aussi, il semble que si vous êtes la création de vos contraintes à l'intérieur de
updateViewConstraints
? Qui peut aussi être la cause de votre problème. Vous devez être à jour de vos contraintes dans cette méthode, pas de création (de la même manière que danslayoutSubviews
vous la position de votre point de vue, mais ne pas instancier).Êtes-vous certainement ajout de votre point de vue les contraintes de l'extérieur de
updateViewConstraints
(j'.e, dansviewDidLoad
ou similaire).La Documentation dit "Vous pouvez remplacer cette méthode dans une sous-classe dans le but d'ajouter des contraintes à la vue ou de ses sous-vues.". Il semble donc tout à fait cool de créer des contraintes dans updateConstraints: dans le cas où vous avez besoin de changer radicalement votre interface.
pour votre réponse parfaite qui vraiment résoudre mon uiscrollview question.
Cette réponse m'a fait remarquer que je n'étais pas un appel à super dans
viewWillTransition:toSize:withCoordinator
et n'était donc pas de la réception d'unupdateViewConstraints
appel dans certains cas. Merci!!!!OriginalL'auteur lxt
Vous êtes dans le ViewController et vous voulez que le système d'appel
updateViewConstraints
, alors vous devez appeler ceSi vous l'appelez dans
viewDidLoad
,updateViewConstraints
sera appelé double dans Xcode 9. Donc, je pense que Klaas réponse est mieux.OriginalL'auteur onmyway133
Votre
UIView
doit mettre en œuvre+ (BOOL)requiresConstraintBasedLayout
et retourYES
. Dans ce casupdateViewConstraints
sera d'abord appelé pour l'installation de contraintes.OriginalL'auteur highmaintenance
Juste une supposition et non pas 100% certain:
updateViewConstraints ne sera pas appelé si votre vue contrôleurs de vue de la racine ne nécessite pas de mise en page automatique. Donc, vous devez au moins ajouter une contrainte à la racine de votre vue (quelque part dans loadview ou viewDidLoad) ou de l'ensemble
Ce qui devrait déclencher votre point de rupture.
Je suis d'accord avec vous.
[self.view setNeedsUpdateConstraints]
faireupdateViewConstraints
appelé deux fois.Une chose de plus, si la vue du contrôleur est présenté, votre code va faire de son affichage est la taille de
CGSizeZero
. Vous pouvez avoir un essai.OriginalL'auteur Klaas
Vous pouvez ajouter des contraintes dans
updateViewConstraints
si vous ajoutez un drapeau pour indiquer si les contraintes ont été ajoutées. Voir aussi mon essentielOriginalL'auteur DawnSong
Vous devriez appeler
setNeedsUpdateConstraints
Apple documentaion dit:OriginalL'auteur Doug