Puis-je désactiver la mise en page automatique pour une sous-vue au moment de l'exécution?
J'ai une vue qui doit disposer de son image manipulée par programmation - c'est une sorte de document de la vue qui s'enroule à son contenu qui est ensuite défilement et de zoom autour d'un superview par la manipulation de l'image d'origine. Mise en page automatique des combats avec cette lors de l'exécution.
La désactivation de la mise en page automatique entièrement semble un peu sévère, car il pourrait raisonnablement être utilisé pour gérer la mise en page pour les autres vues. Il semble comme ce que je veux c'est une sorte de "nulle contrainte".
Vous devez vous connecter pour publier un commentaire.
J'ai eu le même problème. Mais je l'ai résolu.
Oui, vous pouvez désactiver l'auto mise en page au moment de l'exécution pour un
UIView
, plutôt que de le désactiver pour l'ensemble de la xib ou d'un scénario qui est défini par défaut dans Xcode 4.3 et versions ultérieures.Ensemble
translatesAutoresizingMaskIntoConstraints
àYES
, avant de définir le cadre de votre sous-vue:self.exampleView.setTranslatesAutoresizingMaskIntoConstraints(true)
view.autoresizingMask = AutoresizingMask(rawValue: 0)
.J'ai eu un problème similaire où la mise en page automatique est primordial certains de mes image-réglage au moment de l'exécution (j'ai eu un point de vue dynamique que dans certains cas poussé un nouvelle vue-contrôleur...en poussant et en appuyant ensuite sur le Dos serait réinitialiser l'affichage initial).
J'ai eu autour de cette en mettant mon code de manipulation dans
viewDidLayoutSubviews
de mon point de Vue Contrôleur. Cela semble appelé après que quelle que soit la contrainte de mojo est appelée, mais avant viewDidAppear, de sorte que l'utilisateur n'est pas plus sage.Peut-être tout simplement la mise en
translatesAutoresizingMaskIntoConstraints
àYES
(et pas de l'ajout de contraintes supplémentaires, touchant ce point de vue) qui vous permettra de définir le cadre, sans combat, la mise en page automatique du système.Dans iOS 8, vous pouvez définir une NSLayoutConstraint d'être actif ou non. Donc, si je suis en utilisant une interface builder, j'ajoute tous mes contraintes à une OutletCollection et puis les activer ou les désactiver à l'aide:
L'application je l'utilise pour ici est d'avoir des contraintes différentes en mode portrait et en mode paysage et j'ai activer/désactiver basé sur la rotation de l'appareil. Cela signifie que je peux créer un certain complexe de changements de disposition de tous dans interface builder pour les deux orientations, et toujours à disposition automatique sans l'détaillé de mise en page automatique de code.
Ou vous pouvez activer /désactiver à l'aide removeConstraints et addConstraints.
Je ne sais pas si cela va aider quelqu'un d'autre, mais j'ai écrit une catégorie pour faire de cette pratique, car je me retrouve à faire beaucoup.
UIView+DisableAutolayoutTemporarily.h
UIView+DisableAutolayoutTemporarily.m
Je l'utilise comme ceci:
Espère que cela aide.
Vous pouvez définir la
translatesAutoresizingMaskIntoConstraints
typeBoolean
, la Valeur Oui à l'Utilisateur Défini Exécution des Attributs de la UIView que vous voulez dans le xib/storyboard.Vous pouvez répartir sur plusieurs storyboards si vous souhaitez utiliser la mise en page automatique pour certains points de vue.
Pour moi, il a travaillé pour créer la sous-vue de la programmation, dans mon cas, la mise en page automatique a été de jouer avec la vue que j'avais besoin de tourner autour de son centre, mais une fois que j'ai créé ce point de vue par programmation, il a travaillé.
De mon point de vue, j'ai eu une Étiquette et d'un Texte. Le label avait pan geste. L'étiquette se déplace autour d'amende au cours de glisser. Mais lorsque j'utilise la zone de texte clavier, l'étiquette réinitialise sa position à l'emplacement d'origine défini dans la mise en page automatique. La question ai résolu lorsque j'ai ajouté le texte suivant dans swift pour l'étiquette. J'ai ajouté ceci dans viewWillAppear mais il peut être ajoutée à peu près n'importe où vous avez accès à la cible de terrain.
Ce qui m'est arrivé dans un projet sans story-board ou xib fichiers. Toutes les 100% du code. J'avais un bandeau publicitaire en bas et je voulais l'avis de limites pour s'arrêter à la bannière publicitaire. Le point de vue de redimensionner automatiquement après le chargement. J'ai essayé toutes les résolution sur cette page, mais aucun d'entre eux travaillaient.
J'ai fini par la simple création d'une sous-vue avec le raccourcissement de la hauteur et placé de manière que, dans la vue principale du contrôleur. Alors tout mon contenu est allé à l'intérieur de la sous-vue. Qui a résolu le problème très facilement sans rien faire que sentais que ça allait à l'encontre du grain.
Je pense si vous voulez un point de vue qui n'est pas la taille normale qui remplit la fenêtre, alors vous devriez utiliser une sous-vue pour que.
J'ai rencontré un scénario similaire, où j'ai rejoint un projet qui a été lancé avec mise en page automatique, mais j'avais besoin de faire des ajustements dynamiques à plusieurs points de vue. Voici ce qui a fonctionné pour moi:
N'ont PAS de points de vue ou des composants disposés dans interface builder.
Ajouter votre point de vue purement de départ par programme avec allocation/init et l'établissement de leurs cadres de façon appropriée.
Fait.
Au lieu de désactivation de la mise en page automatique, je voudrais juste calculer la nouvelle contrainte avec l'image que vous souhaitez remplacer. Qui me semble être la manière appropriée. Si vous êtes en train d'ajuster les composants qui s'appuient sur les contraintes, les ajuster en conséquence.
Par exemple, si vous avez une contrainte verticale de 0 entre les deux points de vue (mavue et otherView), et vous avez un pan geste ou quelque chose qui ajuste la hauteur de mavue ensuite, vous pouvez recalculer la contrainte avec les valeurs ajustées.
Pour ceux d'entre vous qui sont à l'aide de mise en page automatique, s'il vous plaît vérifier ma solution ici. Vous devriez faire
@IBOutlet
's des contraintes que vous voulez régler et de modifier ses constantes.si c'est xib fichier: