2010-11-12 25 views
2

J'essaie d'obtenir que cela fonctionne avec le code dans la vue d'un ViewController:Problème avec autoresizingMask et des marges fixes

alt text

mais je ne peux pas le faire fonctionner.

J'ai essayé

-(void)loadView { 
    UIView *contentView = [[[UIView alloc] init] autorelease]; 
    self.view = contentView; 
    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; 
    button.frame = CGRectMake(5,5,0,100); 
    button.autoresizingMask = UIViewAutoresizingFlexibleWidth; 
    [contentView addSubview:button]; 
} 

mais la largeur du bouton est toujours la largeur de la superview ...

Je suis sûr qu'il ya une explication facile.

Merci, tout le monde!

Antonio

Répondre

0

-initWithFrame: est l'initialiseur désigné pour UIView. Du côté de Mac (NSView) je sais que des choses étranges peuvent se produire en utilisant -init au lieu de -initWithFrame:. C'est peut-être ça le problème?

+0

Malheureusement, le résultat du code ci-dessus est le même si je -initWithFrame :. Je n'arrive pas à faire pousser le bouton mais en laissant des marges de 5 px sur les côtés ... – Antonio

+0

L'initiez-vous avec une largeur de trame de 110? En outre, vous placez votre vue dans la vue de contenu (qui peut créer une confusion avec sa taille) avant d'y ajouter le bouton de taille appropriée. Je ne suis pas sûr que ce soit ce qui se passe réellement, mais il est probablement préférable de construire votre hiérarchie de vue avec une géométrie connue avant de l'ajouter à une autre, ce qui pourrait la modifier, déclenchant l'autosignalisation avant l'ajout de votre bouton. J'espère que cela à du sens. –

+0

Vous avez absolument raison. Je devais init avec un cadre. Merci de votre aide! – Antonio

0

Au lieu de prendre la peine avec le drapeau autoresizingMask, j'Override layoutSubviews dans la sous-classe personnalisée UIView:

 
- (void)loadView { 
    self.view = [ContentView view]; 
    self.view.frame = CGRectMake(0, 0, 30, 100); 
} 

ContentView est défini comme:

 

@interface ContentView : UIView { 
    UIButton *button; 
} 

+ (id)view; 

@end 

@implementation ContentView { 

+ (id)view { 
    return [[self new] autorelease]; 
} 

- (id)initWithFrame:(CGRect)frame { 
    if (self = [super initWithFrame:frame]) { 
     button = [UIButton buttonWithType:UIButtonTypeCustom]; 
     [self addSubview:button]; // Retains the button. 
    } 
    return self; 
} 

- (void)layoutSubviews { 
    const CGFloat margin = 5; 

    CGRect size = self.frame.size; 
    button.frame = CGRectMake(margin, margin, 
     size.width - 2 * margin, 
     size.height - 2 * margin); 
} 

} 

0

Essayez ce code.

- (void)loadView 
{ 
    CGRect screenBounds = [UIScreen mainScreen].bounds; 
    UIView *contentView = [[[UIView alloc] initWithFrame:screenBounds] autorelease]; 
    self.view = contentView; 
    UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
    button.frame = CGRectMake(5,5,screenBounds.size.width - 10,100); 
    [button setTitle:@"hello" forState:UIControlStateNormal]; 
    button.autoresizingMask = UIViewAutoresizingFlexibleWidth; 
    [contentView addSubview:button]; 
}