Авторазмер не работает программно

Я хочу создать UIView который изменит свою ширину в соответствии с размером экрана iPhone, и он должен оставаться в нижней части обзора.

Я создал свежий проект с раскадровкой и добавить ниже код.

Вот мой код

-(void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:true];

    UIView *box = [[UIView alloc]initWithFrame:CGRectMake(0, 448, 320, 120)];
    [box setBackgroundColor:[UIColor redColor]];

    [box setAutoresizingMask:UIViewAutoresizingFlexibleHeight];
    [box setAutoresizingMask:UIViewAutoresizingFlexibleWidth];
    [box setAutoresizingMask:UIViewAutoresizingFlexibleTopMargin];
    [box setAutoresizingMask:UIViewAutoresizingFlexibleLeftMargin];
    [box setAutoresizingMask:UIViewAutoresizingFlexibleRightMargin];

    [self.view addSubview:box];
}

Авто макет выключен.

Если я делаю то же самое, применяя автоматическое изменение размера из конструктора интерфейса, то он работает отлично.

Я не понял ни одной причины, по которой это не работает.

4 ответа

Решение

Маленькая ошибка с моей стороны. Мой код правильный.

Эта проблема связана с xCode 6.1, на экране запуска у нас есть xib-файл из xCode 6, поэтому я должен удалить ссылку на него из General Setting-> App Icon и Launch Images и использовать каталог Assert вместо launchscreen.xib, и он начинает работать....

В любом случае спасибо за ответ на мой вопрос.

От

http://stackru.com/q/7754851/4030971 

Установка только (UIViewAutoresizingF flexWidth | UIViewAutoresizingF FlexibleHeight) эквивалентна:

Параметр (UIViewAutoresizingF FlexibleWidth | UIViewAutoresizingF flexHeight | UIViewAutoresizingF flexLeftMargin | UIViewAutoresizingFurableRightMargin | UIViewAutoresizingF FlexibleTopMargin | UIViewAutoresizingFurableBottomMargin эквивалентен: в коде):

Я думаю -

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

Это маска, попробуйте сделать это:

[box setAutoresizingMask:UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth |
 UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin];
  • также, если вы хотите, чтобы высота не менялась, удалите UIViewAutoresizingFlexibleHeight

редактировать

Чтобы установить его для любого размера устройства, сделайте что-то вроде этого:

CGRect fr = box.frame;
fr.size.width = self.view.frame.size.width;
fr.origin.y = self.view.frame.size.height - 120;
box.frame = fr;

Вы перезаписываете все свои маски изменения размера.

Вы можете сделать это так:

[box setAutoresizingMask:UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin];
Другие вопросы по тегам