2010-11-12 6 views
2

Я пытаюсь получить эту работу с кодом вида в ViewController в:Проблем с autoresizingMask и фиксированная наценка

alt text

, но я не могу заставить его работать.

Я попытался

-(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]; 
} 

но ширина кнопки еще ширина надтаблицы ...

Я уверен, что есть простое объяснение.

Спасибо, всем!

Антонио

ответ

0

-initWithFrame: является назначенным инициализатором UIView. На стороне Mac (NSView) я знаю, что странные вещи могут произойти при использовании -init вместо -initWithFrame:. Возможно, это проблема?

+0

К сожалению, приведенный выше код тот же, если I -initWithFrame :. Я не могу заставить кнопку расти, но оставляя поля на 5 пикселей по бокам ... – Antonio

+0

Вы начинаете с ширины рамки 110? Кроме того, перед добавлением к нему кнопки соответствующего размера вы помещаете свое представление в представление содержимого (которое может испортить его размер самостоятельно). Я не уверен, что это то, что на самом деле происходит, но лучше всего построить иерархию представлений с известной геометрией, прежде чем добавлять ее в другую, что может изменить ее, инициируя автоматизацию до того, как ваша кнопка будет добавлена. Я надеюсь, что в этом есть смысл. –

+0

Вы абсолютно правы. Мне пришлось инициализировать фрейм. Спасибо за вашу помощь! – Antonio

0

Вместо того, чтобы беспокоить с autoresizingMask флагом, я переопределить layoutSubviews в пользовательских UIView подкласса:

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

где ContentView определяется как:

 

@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

Попробуйте этот код.

- (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]; 
}