【发布时间】:2013-04-15 06:48:41
【问题描述】:
我正在开发专用计算器的界面,我在 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 声明“容器”的宽度为 280 像素,高度为 364 像素,因此出于某种原因,我没有得到正确的值。
我什至试图找到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}}
因此您可以看到,只有在视图布置了其子视图之后,它才确定了对象的框架和边界。
【问题讨论】:
标签: ios view uiviewcontroller frame bounds