我正在开发专用计算器的界面,并且在 IB 中有以下设置:
我使用了 IB 的“Container View”并将其设置为我的自定义视图控制器“ButtonViewController”。
然后,在我的 ButtonViewController.m 文件中,我有以下内容:
- (void)viewDidLoad
{
[super viewDidLoad];
self.view.backgroundColor = [UIColor colorWithRed: 0.75 green: 0.0 blue: 0.0 alpha: 1.0 ];
NSLog(@"self.view.bounds.size.width:\t%f", self.view.bounds.size.width);
NSLog(@"self.view.bounds.size.height:\t%f", self.view.bounds.size.height);
NSLog(@"self.view.frame.size.width:\t%f", self.view.frame.size.width);
NSLog(@"self.view.frame.size.height:\t%f", self.view.frame.size.height);
}
我得到以下屏幕输出:
以及以下控制台输出:
self.view.bounds.size.width: 320.000000
self.view.bounds.size.height: 460.000000
self.view.frame.size.width: 320.000000
self.view.frame.size.height: 460.000000
Interface Builder 声明“容器”宽 280px,高 364px,所以由于某种原因,我没有得到正确的值。
我什至试图找到super
'bounds
和frame
尺寸,但它们仍然是 320x460。
有人可以告诉我我做错了什么吗?
提前致谢
[更新]
只是为其他人提供的一些信息:我已经使用类似的 UI 控件进行了一些测试,这就是我发现的:(cvObject
是一个UICollectionView
对象)
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
NSLog(@"%s: self.cvObject.bounds:\t%@", __FUNCTION__, NSStringFromCGRect(self.cvObject.bounds));
NSLog(@"%s: self.cvObject.frame:\t%@", __FUNCTION__, NSStringFromCGRect(self.cvObject.frame));
}
-(void)viewWillAppear:(BOOL)animated
{
NSLog(@"%s: self.cvObject.bounds:\t%@", __FUNCTION__, NSStringFromCGRect(self.cvObject.bounds));
NSLog(@"%s: self.cvObject.frame:\t%@", __FUNCTION__, NSStringFromCGRect(self.cvObject.frame));
}
- (void)viewDidAppear:(BOOL)animated
{
NSLog(@"%s: self.cvObject.bounds:\t%@", __FUNCTION__, NSStringFromCGRect(self.cvObject.bounds));
NSLog(@"%s: self.cvObject.frame:\t%@", __FUNCTION__, NSStringFromCGRect(self.cvObject.frame));
}
-(void)viewWillLayoutSubviews
{
NSLog(@"%s: self.cvObject.bounds:\t%@", __FUNCTION__, NSStringFromCGRect(self.cvObject.bounds));
NSLog(@"%s: self.cvObject.frame:\t%@", __FUNCTION__, NSStringFromCGRect(self.cvObject.frame));
}
-(void)viewDidLayoutSubviews
{
NSLog(@"%s: self.cvObject.bounds:\t%@", __FUNCTION__, NSStringFromCGRect(self.cvObject.bounds));
NSLog(@"%s: self.cvObject.frame:\t%@", __FUNCTION__, NSStringFromCGRect(self.cvObject.frame));
}
我得到的是:
-[FPViewController viewDidLoad]: self.cvObject.bounds: {{0, 0}, {0, 0}}
-[FPViewController viewDidLoad]: self.cvObject.frame: {{0, 0}, {0, 0}}
-[FPViewController viewWillAppear:]: self.cvObject.bounds: {{0, 0}, {0, 0}}
-[FPViewController viewWillAppear:]: self.cvObject.frame: {{0, 0}, {0, 0}}
-[FPViewController viewWillLayoutSubviews]: self.cvObject.bounds: {{0, 0}, {0, 0}}
-[FPViewController viewWillLayoutSubviews]: self.cvObject.frame: {{0, 0}, {0, 0}}
-[FPViewController viewDidLayoutSubviews]: self.cvObject.bounds: {{0, 0}, {280, 312}}
-[FPViewController viewDidLayoutSubviews]: self.cvObject.frame: {{20, 128}, {280, 312}}
-[FPViewController viewDidAppear:]: self.cvObject.bounds: {{0, 0}, {280, 312}}
-[FPViewController viewDidAppear:]: self.cvObject.frame: {{20, 128}, {280, 312}}
所以你可以看到,只有在视图布置了它的子视图之后,它才确定了你的对象的框架和边界。