Проблема с автоматическим изменением размера маски и фиксированными полями - PullRequest
2 голосов
/ 12 ноября 2010

Я пытаюсь заставить это работать с кодом в представлении ViewController:

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

, но ширина кнопки по-прежнему равна ширине суперпредставления ...

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

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

Антонио

Ответы [ 3 ]

0 голосов
/ 09 декабря 2010

Вместо использования флага 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 голосов
/ 14 июля 2011

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

- (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];
}
0 голосов
/ 15 ноября 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...