都知道bounds是相对于自己的坐标系,默认的bounds起点是(0, 0)。那改变bounds的position之后会产生什么结果呢?

1
2
3
4
5
6
7
8
9
10
11
UIView *view1 = [[UIView alloc] initWithFrame:CGRectMake(20, 20, 280, 250)];
[view1 setBounds:CGRectMake(-20, -20, 280, 250)];
view1.backgroundColor = [UIColor redColor];
[self.view addSubview:view1];
NSLog(@"view1 frame:%@========view1 bounds:%@",NSStringFromCGRect(view1.frame),NSStringFromCGRect(view1.bounds));
UIView *view2 = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
view2.backgroundColor = [UIColor yellowColor];
[view1 addSubview:view2];
NSLog(@"view2 frame:%@========view2 bounds:%@",NSStringFromCGRect(view2.frame),NSStringFromCGRect(view2.bounds));

结果如下:

改变bounds不会改变当前view的位置,改变是一个信息,表示当前view的原点位置不再是(0, 0),而是新的位置(-20, -20)。所以当前view的子view都会根据新的原点位置进行调整,调整到距(0, 0)的位置。所以会偏向(20, 20)。


参考:

  1. Never-say-Never | ios view的frame和bounds之区别(位置和大小)