ios视图frame和bounds的对比

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

bounds坐标:自己定义的坐标系统,setbound指明了本视图左上角在该坐标系统中的坐标,

默认值(0,0)

frame坐标: 子视图左上角在父视图坐标系统(bounds坐标系统)中的坐标,默认值(0,0)

子视图实际位置=父视图实际位置-父视图bounds坐标+子视图frame坐标

一、bounds

只影响“子视图”相对屏幕的位置,修改时不会影响自身相对屏幕的位置

1、父视图bounds坐标为(0,0)时

- (void)viewDidLoad {

[super viewDidLoad];//Do any additional setup after loading the view, typically from a nib.NSLog(@"view frame:%@========view bounds:%@",NSStringFromCGRect(self.view.frame),NSStringFromCGRect(self.view.bounds));

UIView*view1 = [[UIView alloc] initWithFrame:CGRectMake(20,20,200,260)];

view1.backgroundColor=[UIColor redColor];

[self.view addSubview:view1];

NSLog(@"view frame:%@========view bounds:%@",NSStringFromCGRect(self.view.frame),NSStringFromCGRect(self.view.bounds));

}

2、父视图bounds坐标为(-20,-20)时

- (void)viewDidLoad {

[super viewDidLoad];//Do any additional setup after loading the view, typically from a nib.NSLog(@"view frame:%@========view bounds:%@",NSStringFromCGRect(self.view.frame),NSStringFromCGRect(self.view.bounds));

UIView*view1 = [[UIView alloc] initWithFrame:CGRectMake(20,20,200,260)];

view1.backgroundColor=[UIColor redColor];

[self.view addSubview:view1];

[self.view setBounds:CGRectMake(-20, -20,320,568)];

NSLog(@"view frame:%@========view bounds:%@",NSStringFromCGRect(self.view.frame),NSStringFromCGRect(self.view.bounds));

}

二、frame

修改时改变了自己的在父视图坐标系统(bounds坐标系统)的位置,自身位置和

子视图位置都会被改变。

1、父视图frame坐标(0,0)

- (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,260)];

view1.backgroundColor=[UIColor redColor];

[self.view addSubview:view1];

UIView*view2 = [[UIView alloc] initWithFrame:CGRectMake(0,0,100,100)];

view2.backgroundColor=[UIColor yellowColor];

[view1 addSubview:view2];

NSLog(@"view frame:%@========view bounds:%@",NSStringFromCGRect(view1.frame),NSStringFromCGRect(view1.bounds));

NSLog(@"view frame:%@========view bounds:%@",NSStringFromCGRect(view2.frame),NSStringFromCGRect(view2.bounds));

}

2、父视图frame坐标(60,60)

- (void)viewDidLoad {

[super viewDidLoad];//Do any additional setup after loading the view, typically from a nib.UIView*view1 = [[UIView alloc] initWithFrame:CGRectMake(60,60,200,260)];

view1.backgroundColor=[UIColor redColor];

[self.view addSubview:view1];

UIView*view2 = [[UIView alloc] initWithFrame:CGRectMake(0,0,100,100)];

view2.backgroundColor=[UIColor yellowColor];

[view1 addSubview:view2];

NSLog(@"view frame:%@========view bounds:%@",NSStringFromCGRect(view1.frame),NSStringFromCGRect(view1.bounds));

NSLog(@"view frame:%@========view bounds:%@",NSStringFromCGRect(view2.frame),NSStringFromCGRect(view2.bounds));

}

三、说明

根视图只能修改bounds坐标,而不可以修改frame坐标

以下self.view为根视图

1、初始状态

- (void)viewDidLoad {

[super viewDidLoad];//Do any additional setup after loading the view, typically from a nib.UIView*view1 = [[UIView alloc] initWithFrame:CGRectMake(20,20,200,260)];

view1.backgroundColor=[UIColor redColor];

[self.view addSubview:view1];

}

2、修改bounds坐标:有效

- (void)viewDidLoad {

[super viewDidLoad];//Do any additional setup after loading the view, typically from a nib.UIView*view1 = [[UIView alloc] initWithFrame:CGRectMake(20,20,200,260)];

view1.backgroundColor=[UIColor redColor];

[self.view addSubview:view1];

CGRect viewBounds=self.view.bounds;

viewBounds.origin.y=-40;

viewBounds.origin.x=-40;

self.view.bounds=viewBounds;

NSLog(@"view frame:%@========view bounds:%@",NSStringFromCGRect(self.view.frame),NSStringFromCGRect(self.view.bounds));

}

3、修改frame坐标:无效

- (void)viewDidLoad {

[super viewDidLoad];//Do any additional setup after loading the view, typically from a nib.UIView*view1 = [[UIView alloc] initWithFrame:CGRectMake(20,20,200,260)];

view1.backgroundColor=[UIColor redColor];

[self.view addSubview:view1];

CGRect viewFrame=self.view.frame;

viewFrame.origin.y=60;

viewFrame.origin.x=60;

self.view.frame=viewFrame;

NSLog(@"view frame:%@========view bounds:%@",NSStringFromCGRect(self.view.frame),NSStringFromCGRect(self.view.bounds));

}

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航