8
votes

Objective-C / SWIFT (iOS) Lorsque les contraintes automatiques sont-elles appliquées dans le flux de travail View / ViewController?

J'ai des problèmes de détermination de la création lorsque la configuration Contraintes auto-contraintes sur un xib est appliquée dans le processus de configuration de la vue.

Pour plus d'explication:

  • J'ai configuré un xib pour une vue
  • I Définissez la taille "métriques simulées" sur iPhone 3.5-pouce
  • J'ai ajouté des contraintes automatiques aux sous-espions à l'intérieur de cette vue
  • Dans le contrôleur d'affichage, j'effectue certaines opérations dépendantes de la sous-visView ( iboutlet ) cadres / limites dans la ViewDidLoad Méthode
  • Dans la vue, j'effectue certaines opérations dépendantes de la sous-vision ( iboutlet ) cadres / limites dans la méthode éraftfromnib méthode

    Dans ces 2 méthodes ( ViewController :: ViewDidLoad and View :: Awakeffromnib ) Les vues iboutlet ont été chargées mais les contraintes n'ont pas encore été appliquées. La trame réelle est toujours réglée sur la taille de l'iPhone 3.5 "(largeur 320) lors de l'utilisation d'un simulateur plus grand (tel que le simulateur iPhone 6).

    Quand ces contraintes automatiques sont-elles appliquées et quand les opérations nécessaires devraient-elles avoir besoin de la trame / limite réelle des sous-espions ont lieu?

    J'utilise Xcode 6.3, Swift (1.2)


0 commentaires

3 Réponses :


13
votes

Les contraintes sont appliquées dans la méthode layoutsubviews . Donc, si vous voulez faire quelque chose après leur application dans une sous-classe uiview , remplacez la méthode: xxx

dans un uiviewontroller Sous-classe, Utilisez ViewDidLayouTouSubviews dans le même objectif: xxx

Veuillez noter que vous ne devez pas définir image / / Pour une vue si vous avez ajouté des contraintes de mise en page automatiques à cette vue.


1 commentaires

Tout en travaillant avec une sous-classe Uitabilieviewcell personnalisée, cela seul n'a pas mis à jour les cadres immédiatement; Seulement faire défiler l'éloignement d'une cellule et a à nouveau amené à être aménagé. Ajouter setneedslayout (); Layl / code> à la fin de mon UpdateConstraints Le remplacement semble l'avoir corrigé. Étonnamment, remplaçant Layoutifned avec Layout n'a pas fonctionné, pas même après SETNEEDSLAYOUT .



0
votes

Remarque pour Xcode 8: Si vous utilisez la mise en page automatique, vous pouvez avoir un problème avec une nouvelle fonctionnalité: voir [n'importe quel périphérique] . Lorsque vous testez votre application sur un autre périphérique (simulateur) et que vous avez afféreur écran, les limites de l'écran de ce périphérique seront appliquées dans ViewwilllayouTouSubviews .


0 commentaires

0
votes

Vous pouvez utiliser la méthode xxx

}

mais cette méthode sera appelée plusieurs fois dans le cycle de vie d'une vue, telle que le changement d'orientation ou les vues de déménagement et de sortie , alors vous devez gérer cela.


0 commentaires