Iphone self.window.rootViewController与window addSubview
我注意到应用程序代理中有很多iPhone应用程序的示例Iphone self.window.rootViewController与window addSubview,iphone,objective-c,Iphone,Objective C,我注意到应用程序代理中有很多iPhone应用程序的示例 -(void)applicationdFinishLaunching:(UIApplication*)应用程序 有 [窗口添加子视图:someController.view](1) 相对于 self.window.rootViewController=self.someController(2) 是否有任何实际的理由使用一个而不是另一个?技术上正确吗?控制器是否有与数字(2)相同的命令 self.someController.rootCon
-(void)applicationdFinishLaunching:(UIApplication*)应用程序
有
[窗口添加子视图:someController.view]代码>(1)
相对于
self.window.rootViewController=self.someController代码>(2)
是否有任何实际的理由使用一个而不是另一个?技术上正确吗?控制器是否有与数字(2)相同的命令
self.someController.rootController=self.someOtherController;//pseudocode
iOS4新增了UIWindow
rootViewController
属性
较旧的技术是使用addSubview
推荐的新技术是设置rootViewController
崩溃是因为调用的方法不存在,而不是因为变量未初始化
-setRootViewController
在iOS 4.0之前不存在。使用
[self.windowaddsubview:self.tabBarController.view]代码>
相反
或者,将目标platfor更新为4.0.2或更高版本。目前不使用iOS 4的用户可能不到5%。我使用以下代码:
rootViewController_ = [[RootViewController alloc] initWithFrame:[UIScreen mainScreen].bounds];
window_ = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
if ([window_ respondsToSelector:@selector(setRootViewController:)]) { // >= ios4.0
[window_ setRootViewController:rootViewController_];
} else { // < ios4.0
[window_ addSubview:rootViewController_.view];
}
rootViewController\[[rootViewController alloc]initWithFrame:[UIScreen mainScreen].bounds];
窗口\=[[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds];
如果([window_uRespondsToSelector:@selector(setRootViewController:)]){/>=ios4.0
[窗口\设置rootViewController:rootViewController\];
}else{/
我的看法:
self.window.rootViewController
将根据状态栏高度调整rootViewController.view的大小
但是,如果使用addSubview,则不会
比如说,,
如果将RootViewController设置为NavigationController,
导航控制器应为(0,0320480)
但如果将RootViewController设置为公共UIViewController,
导航控制器为(0,0320460)
如果使用addSubview:两个ViewController将是(0,0320480)
如果在状态栏中有呼叫。当您使用setRoot时,它也会为您更改。。。
如果使用addSubview,子视图的大小不会改变
使用不同的视图边框颜色进行一些测试这只是ios 6发布后的更新
如果仍在使用-[UIWindow addsubview:]样板文件,您可能会在控制台中看到消息“应用程序启动结束时,应用程序窗口应该有一个根视图控制器”。以及应用程序中潜在的旋转问题和布局问题
如上所述设置窗口的rootViewController也可以解决此问题。为什么建议设置rootViewController而不是addSubview?百事可乐可以告诉你,它在iOS 5.0上更有意义,属于NDA,因此我们不能在这里讨论,在开发论坛上询问,你会得到它,它与视图控制器包含有关。一个有争议的好处是,作为属性,您可以在IB中设置它,而不是编写代码来执行关联。不要合并这两种技术!它会导致奇怪的行为,有时会导致自动旋转停止工作。rootViewController
在iPad上的应用程序中创建新的游戏中心帐户时工作不正常-基础视图消失。当主视图添加了addSubview
时,同样的效果也很好。是的,即使ViewController使用了新的iOS6旋转API,我的视图也显示在错误的方向上……直到我修复了这个问题!看在上帝的份上!我已经收到这条消息好几个星期了,直到现在我才找到一个合适的解决方案,因为我没有在寻找它!