107 votes

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".

171voto

MuhammadAamirALi Points 2555

J'ai eu le même problème. Mais j'ai résolu Oui, vous pouvez désactiver la mise en page automatique de la propriété au moment de l'exécution de la vue spécifique pas pour tout xib ou d'un scénario qui est défini par défaut dans Xcode 4.3 et versions ultérieures.

ensemble TranslatesAutoresizingMaskIntoConstraints oui, avant de vous mettre en image de votre sous-vue

[self.benchmarkButton removeFromSuperview];
[self.benchmarkButton setTranslatesAutoresizingMaskIntoConstraints:YES];
[self.benchmarkButton setFrame:CGRectMake(20, self.benchmarkButton.frame.origin.y+40, 260, 30)];
[self.benchmarksView addSubview:self.benchmarkButton];

50voto

jmstone Points 4550

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 en 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.

30voto

Jon Hull Points 320

Peut-être tout simplement la mise en translatesAutoresizingMaskIntoConstraints OUI (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?

9voto

doctordoder Points 1384

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

#import <UIKit/UIKit.h>

@interface UIView (DisableAutolayoutTemporarily)

// the view as a parameter is a convenience so we don't have to always
// guard against strong-reference cycles
- (void)resizeWithBlock:(void (^)(UIView *view))block;

@end

UIView+DisableAutolayoutTemporarily.m

#import "UIView+DisableAutoResizeTemporarily.h"
@implementation UIView (DisableAutoResizeTemporarily)

- (void)resizeWithBlock:(void (^)(UIView * view))block
{
    UIView *superview = self.superview;
    [self removeFromSuperview];
    [self setTranslatesAutoresizingMaskIntoConstraints:YES];
    __weak UIView *weakSelf = self;
    block(weakSelf);
    [superview addSubview:self];
}

@end

Je l'utilise comme ceci:

[cell.argumentLabel resizeWithBlock:^(UIView *view) {
    [view setFrame:frame];
}];

Espérons que cela aide.

6voto

renaun Points 101

Vous pouvez définir le "translatesAutoresizingMaskIntoConstraints" de type Booléen, la Valeur Oui à l'Utilisateur Défini Exécution des Attributs de la UIView que vous voulez dans le xib/storyboard.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X