
我现在需要让我的 cocos2d-x 游戏一直显示白底黑字的状态条。
根据这篇文章,我的做法如下:
View controller-based status bar appearance NOStatus bar is initially hidden NOStatus bar style Gray style (default)在frameworks/runtime-src/proj.ios_mac/ios/AppController.mm 中的 application:didFinishLaunchingWithOptions: 添加如下代码(完整代码见后面)。
[[UIApplication sharedApplication].statusBarStyle:UIStatusBarStyleDefault]; [[UIApplication sharedApplication] setStatusBarHidden:NO]; // The OpenGLWindow _window = [[UIWindow alloc] initWithFrame: [[UIScreen mainScreen] applicationFrame]]; - (BOOL)prefersStatusBarHidden { return NO; } - (UIStatusBarStyle)preferredStatusBarStyle { return UIStatusBarStyleDefault; } 由于上提到的参考 文章 是显示的黑底白字的状态条,然而我的需求是白底黑字。
最终产生的结果如下:

上面的黑色部分其实就是状态条,只是背景(由于窗口被下移,没有绘制那块区域)也是黑色的,所以就黑成一团了。
cocos2d-x 提供的模板,是这样创建 _window 的:
_window = [[UIWindow alloc] initWithFrame: [[UIScreen mainScreen] bounds]];
我根据上面的文章,将窗口下移,我修改后的代码:
_window = [[UIWindow alloc] initWithFrame: [[UIScreen mainScreen] applicationFrame]];
UI 是这样的结构(完整代码见『附』):
如上图,黄色为标识区域为 StatusBar
红色标识区域为_window
_window内部为 [_window]---rootViewController--> [viewController] ---view--> [eaglView]
eaglView 是最终 cocos2d-x 绘图的区域,他填满整个 _window。
现在我想要的结果是让上图的黑色区域底色变成白色,由于我不懂 iOS ,我猜想的方案可能是:
_window 平级的白色 UIView ,放到黑色区域。eaglView 『挤』下去。大致就是这些,请大家指点下我,最好有代码。我不熟悉 iOS 开发。
感谢了!
application:didFinishLaunchingWithOptions 完整代码:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { cocos2d::Application *app = cocos2d::Application::getInstance(); app->initGLContextAttrs(); cocos2d::GLViewImpl::convertAttrs(); // Override point for customization after application launch. [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault animated:YES]; [[UIApplication sharedApplication] setStatusBarHidden:NO]; // Add the view controller's view to the window and display. _window = [[UIWindow alloc] initWithFrame: [[UIScreen mainScreen] applicationFrame]]; CCEAGLView *eaglView = [CCEAGLView viewWithFrame: [self.window bounds] pixelFormat: (NSString*)cocos2d::GLViewImpl::_pixelFormat depthFormat: cocos2d::GLViewImpl::_depthFormat preserveBackbuffer: NO sharegroup: nil multiSampling: NO numberOfSamples: 0 ]; [eaglView setMultipleTouchEnabled:YES]; // Use RootViewController manage CCEAGLView viewCOntroller= [[RootViewController alloc] initWithNibName:nil bundle:nil]; viewController.wantsFullScreenLayout = YES; viewController.view = eaglView; // Set RootViewController to window if ( [[UIDevice currentDevice].systemVersion floatValue] < 6.0) { // warning: addSubView doesn't work on iOS6 [self.window addSubview: viewController.view]; } else { // use this method on ios6 [_window setRootViewController:viewController]; } [_window makeKeyAndVisible]; // IMPORTANT: Setting the GLView should be done after creating the RootViewController cocos2d::GLView *glview = cocos2d::GLViewImpl::createWithEAGLView(eaglView); cocos2d::Director::getInstance()->setOpenGLView(glview); app->run(); return YES; }