Если у меня есть 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)
Почему ..
Спасибо человеку. Я добавляю UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleRightMargin это прямо сейчас. Извините, что я думал, что добавление UIViewAutoresizingFlexibleLeftMargin означает исправление левой позиции. Я прочитал документ, теперь все в порядке. –