首页 > 代码库 > ios视图frame和bounds的对比
ios视图frame和bounds的对比
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));}
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。