2010-06-13 63 views
2

我开始创建一个基于通用窗口的应用程序。从iPhone版本开始,我创建了一个UIViewController和相关的笔尖。我的视图显示y = -20,尽管它的框架设置为y = 0。旋转后,它会回到y = 0

我的应用程序的委托:

rootViewController = [[RootViewController alloc] initWithNibName:nil bundle:nil]; 
[window makeKeyAndVisible]; 
[window addSubview:rootViewController.view]; 
return YES; 

我的RootViewController的:

- (void)viewDidLoad { 
[super viewDidLoad]; 
adBannerView = [[ADBannerView alloc] initWithFrame:CGRectZero()]; 
[self.view addSubview:adBannerView]; 

}

我试过instanciating按钮代替adBanner,我也得到了相同的结果。

我的RootViewController的笔尖没有改变,因为x代码为我创建它。 我的MainWindow_iPhone.xib也是股票。

这是什么造成的?

更新

改变应用程序的屏幕方向adBannerView(或按钮...)后,将卡入在y = 0的正确位置。我已经尝试将adBannerView的y位置设置为20,这大概是为了补偿状态栏,并且使所有内容都能正确显示,直到我改变方向。然后,所有内容都会向下移动20个像素,并在adBannerView和状态栏之间留出20像素的空间。

+0

'CGRectZero'是一个常量,不是一个函数... – 2010-06-22 21:39:01

+0

'[窗口addSubview:rootViewController.view]'应该是'[window setRootViewController:rootViewController];' – jamone 2012-08-16 01:41:57

回答

6

尝试添加下一行的viewDidLoad(右后[super viewDidLoad];):

self.view.frame = [[UIScreen mainScreen] applicationFrame]; 
+1

那是固定它。我不明白为什么需要它,因为使用NSLog,我发现self.view.frame的值在这行之前和之后是相同的。哦,好吧,谢谢。 – jamone 2010-06-24 23:08:29

+1

欢迎您。 :)当我第一次遇到它的时候,我已经花了几个小时在这个... – 2010-06-25 20:32:14

+0

太棒了。几个月来我一直在寻找解决方案。 – 2011-12-13 18:54:07

0

CGRectZero实际上是一种零矩形(0,0,0,0),所以ADBannerView不应该出现,如果真的有一个宽度和高度为0。你可能想尝试initWithFrame:self.view.frame左右...

+1

是的,但是从文档中,如果ADBannerView上升到顶端,应该用CGRectZero启动。当我尝试使用UIButton时,我设置了0,0,100,50的有效帧,但仍然存在相同的问题。如果我在IB中而不是在代码中设置ADBannerView或UIButton,它也是相同的。 – jamone 2010-06-16 12:07:27

0

在添加视图之前,您应该设置尺寸标识符:

- (void)viewDidLoad { 
[super viewDidLoad]; 
adBannerView = [[ADBannerView alloc] initWithFrame:CGRectZero()]; 

if(UIInterfaceOrientationIsPortrait([[UIDevice currentDevice] orientation])) 
    adBannerView.currentContentSizeIdentifier = ADBannerContentSizeIdentifier320x50; 
else 
    adBannerView.currentContentSizeIdentifier = ADBannerContentSizeIdentifier480x32; 


[self.view addSubview:adBannerView]; 

// now you can treat it like any other subview 
// For example, if you want to move it to the bottom of the view, do this: 

CGRect frame = adBannerView.frame; 
frame.origin.y = self.view.frame.size.height - frame.size.height; 
[adBannerView setFrame:frame]; 

} 

每当界面旋转时,您都应该通知横幅更改尺寸。

假设您可以访问WWDC视频(可免费获得),请检查视频会话305。它演示添加横幅。

+0

我试过了,但仍然没有改变。由于即使我尝试在y = 0处放置UIButton或任何其他控件,也会出现问题,所以我不会看到它的iAd如何相关。 – jamone 2010-06-23 03:54:36