2010-05-26 71 views
0

开发一个iPad界面,我有一个场景,我有一个UIViewController管理视图,该视图直接作为主UIWindow的子视图放置。iPad/iPod:autoRotate在窗口中调整视图

在放入UIWindow之前,该视图被调整为非标准尺寸,比如768x460,并且位于屏幕的底部。

旋转设备时,UIViewController的autoRotate特性会导致视图被调整大小,以便填充整个UIWindow空间。

我认为这可能是因为在XIB中,视图设置为窗口大小,但是当我改变它以反映所需的大小时,它仍然将其扩展为窗口大小。

然后我进入MainWindow XIB并关闭autoresizeSubviews,它仍然发生。

这是一个非常令人沮丧的问题,我希望只有一些明显的东西我错过了。

任何人有任何明智的想法?

代码的请求:

browseController = [[BrowseController alloc] initWithNibName:@"BrowseController" bundle:nil]; 

[[browseController view] setFrame:CGRectMake(0, 544, 768, 460)]; 

[window addSubview:[browseController view]]; 
+0

你可以发布如何将它添加到窗口的代码? – rickharrison 2010-05-26 18:21:56

+0

我加了......虽然没有什么特别的感觉。我根据需要设置框架,当它旋转时,这些数字将被丢弃,并重新绘制框架。 – 2010-05-26 18:43:49

回答

0

什么弹簧和支柱? (aka autoresizingMask)请参阅here。在代码中,您可能需要额外的行

[[browseController view] setAutoresizingMask:UIViewAutoresizingNone]; 
1

如果您在界面构建器中,请在编辑视图时单击大小选项卡。在“autosizing”下点击所有红色箭头,以便它们消失。你不想在那里有任何红色箭头。或代码,你可以做到以下几点:从你的问题

browseController.autoresizingMask = UIViewAutoresizingNone; 
0

没有足够的信息,但是这是通常这个问题(因此我在做一个受过教育的猜测):

苹果只规定ONE UIView应该存在于根级别的UIWindow中 - 如果有多个UIView,则很多行为都是未定义的。通常有一个额外的,你没有注意到在几周前有/忘记了。

实际上,我发现当有“多于一个”时,会出现很多这样的旋转错误,其中苹果的代码变得困惑,并开始随机重新定位事物。

标准的解决方法:

  1. 在每一个应用程序,你永远做
  2. ......总是有一个单一的,空的,您添加到一个UIWindow
  3. “MyRootViewController” ...那么,只要你想添加尽可能多的意见,子视图里面

(因为苹果的奇怪的错误只影响一个UIWindow本身 - 所有子视图工作“预期”)

0

我只是有这个问题,这里是如何我对其进行了修复:

确保您已为视图控件定义了一个视图,该视图附加到窗口的顶层。如果你不这样做,布局会让你疯狂。