【发布时间】:2012-02-20 08:38:30
【问题描述】:
我有一个选项卡控制器,其中包含一个导航控制器,该控制器又包含一个视图控制器。视图控制器显示一个标签栏和一个导航栏。
在这个视图控制器中,我想添加在加载过程中显示的全屏视图(隐藏标签栏和导航栏,但保留状态栏)。我对 UIView 进行了子类化,并在加载到此视图的 nib 文件中设置了布局:
- (id)initWithFrame:(CGRect)frame
{
if (self = [super initWithFrame:frame])
{
// Load nib
self = [[[NSBundle mainBundle] loadNibNamed:@"FrontpageCountdownView" owner:self options:nil] objectAtIndex:0];
}
}
我像这样在视图控制器中添加这个视图:
// Hide tab bar and navigation bar
self.tabBarController.tabBar.hidden = YES;
self.navigationController.navigationBar.hidden = YES;
// Add loading (frontpage countdown) view
CGRect frame = CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height);
NFFrontpageCountdownView *countdownView = [[NFFrontpageCountdownView alloc] initWithFrame:frame];
[self.view addSubview:countdownView];
我笔尖中的视图大小为 460(全屏,减去状态栏)。我的问题是,当我将它添加到视图控制器时,它看起来“更大”。 我认为由于视图的大小为 460,当它添加到视图控制器时它应该显示整个视图,但它不显示底部。即使是 460 像素,视图似乎也太大了。
谁能告诉我这是为什么?
编辑
我的视图在 Interface Builder 中的外观:
我的视图在模拟器中的样子:
【问题讨论】:
-
如果您记录“框架”尺寸,您会得到什么值?
-
如果我登录
frame,我会得到320.000000 x 460.000000 at 0.000000 ; 0.000000。我更新了我的问题,以显示 Interface Builder 中的视图与它在模拟器中的外观之间的区别。 -
我猜你必须设置以下行' view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; '
-
那会破坏我的布局。我只是不明白为什么 Interface Builder 中的 460 高度与“代码”中的 460 高度不同。如果我的视图在 Interface Builder 中是 460,但添加为子视图时要高得多。
-
我尝试删除标签栏控制器和导航控制器,然后在普通视图控制器中添加视图。这完美无缺。当我将导航控制器添加到视图控制器时,它仍然可以正常工作。然后,当添加标签栏控制器时,视图“跳跃”。所以,是标签栏控制器搞砸了。我会尝试进一步调查。
标签: iphone uiview uiviewcontroller interface-builder