Авторазмер не работает программно
Я хочу создать 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];