2012-10-30 3 views
1

Если у меня есть superview.frame = CGRectMake(0,0,200,200); и subview.frame = CGRectMake(0,0,100,100), subview имеет гибкую ширину и высоту, я думаю, что когда кадр супервизора изменится на (0,0,150,150), тогда кадр subview должен измениться на (0, 0, 75, 75). Но это не так.Об авторезистирующей масках

- (void)viewDidLoad 
{ 
[super viewDidLoad]; 
// Do any additional setup after loading the view, typically from a nib. 

UIView * view1 = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 200, 200)]; 
view1.backgroundColor = [UIColor blackColor]; 
[self.view addSubview:view1]; 

UIView * view2 = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)]; 
view2.backgroundColor = [UIColor redColor]; 
view2.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleTopMargin; 
[view1 addSubview:view2]; 

view1.frame = CGRectMake(0, 0, 150, 150); 
[self printRect:view2.frame]; 
} 

- (void) printRect:(CGRect)rect 
{ 
NSLog(@"%0.1f, %0.1f, %0.1f, %0.1f", rect.origin.x, rect.origin.y, rect.size.width, rect.size.height); 
} 

Выход:

0.0, 0.0, 50.0, 50.0 

И когда кадр изменения SuperView положение (0,0,100,100), рамка подвид станет (0,0,0,0)

Почему ..

ответ

2

Замените свою линию кода на мой, как и забыли UIViewAutoresizingFlexibleBottomMargin и UIViewAutoresizingFlexibleTopMargin

view2.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleTopMargin; 
+0

Спасибо человеку. Я добавляю UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleRightMargin это прямо сейчас. Извините, что я думал, что добавление UIViewAutoresizingFlexibleLeftMargin означает исправление левой позиции. Я прочитал документ, теперь все в порядке. –

0

в вашем коде, view2 имеет фиксированные поля, которые сверху вниз по часовой стрелке налево (0, 100, 100, 0), это объясняет ваш автоматический контроль view2. высота и ширина вашего view2 не изменились бы только при увеличении view1. поэтому вы должны добавить UIViewAutoresizingFlexibleBottomMargin и UIViewAutoresizingFlexibleTopMargin к вашей авторезистентной маске view2

 Смежные вопросы

  • Нет связанных вопросов^_^