Barra de estado de iOS 7 como iOS 6

Tengo una aplicación con un outlook de soporte y modo retrato. Y necesito la misma barra de estado de comportamiento como en iOS 6. ¿Cuál es la forma más sencilla de hacer esto?

He probado las soluciones en la barra de estado de pregunta de Stack Overflow iOS 7 de nuevo al estilo de iOS 6? , pero no funciona Mi subvista depende del tamaño de la vista y mi vista no se extiende correctamente. No quiero actualizar mis files XIB; Simplemente quiero agregar algo que me ayude. No sé lo que puede ser (hackear o rezar).

Puedes intentar escribir esto en tu ViewWillappear o DidAppear. Aquí estamos cambiando el marco de vista de 20 píxeles hacia abajo.

CGRect frame = self.view.frame; frame.origin.y = 20; if (self.view.frame.size.height == 1024 || self.view.frame.size.height == 768) { frame.size.height -= 20; } self.view.frame = frame; 

Esto funcionará, pero esta no es una muy buena idea. También puede cambiar el color del text de la barra de estado a claro u oscuro según el background de la aplicación llamando al siguiente método si ayuda.

 -(UIStatusBarStyle)prefernetworkingStatusBarStyle { return UIStatusBarStyleLightContent; // For light status bar return UIStatusBarStyleDefault // For Dark status bar } 

Si está en Xcode 5 y está instalando en iOS 7, entonces lo siento, esto no sucederá (por lo que yo sé).

Si quieres ver la barra de estado en iOS 7 como iOS 6 que abrir tu proyecto en Xcode 4.xx e instalarlo en iOS 7. Un problema con este enfoque que encontré es que a veces Xcode 4.xx no reconoce iOS 7 dispositivo.

Pero si tu Xcode 4.xx puede mostrar tu dispositivo iOS 7, entonces funcionará.

El .api generado desde Xcode 4.xx funcionará tanto en iOS 6 como iOS 7, pero no obtendrá espacio adicional (de la barra de estado) en iOS 7 y el nuevo aspecto de keyboard, selector, conmutador, etc. Pero sí , obtendrá el nuevo UIAlertView (no sé por qué es nuevo y los otros controles son antiguos).

Espero que pronto tengamos una mejor solución en Xcode 5 para esto.

ACTUALIZAR:

Encontré la forma de ejecutar la aplicación desde Xcode 5 como Xcode 4. Esto es solo cuestión del SDK base. Si desea build como Xcode 4 (iOS 6 SDK) desde Xcode 5, haga lo siguiente.

  1. Cierre Xcode 4 y 5.

  2. En Xcode 4, ve a

    /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs

  3. Aquí encontrarás iPhoneOS6.1.sdk . Copie esta carpeta. Y ahora ve en Xcode 5 en la misma ruta. En Xcode 5, encontrarás iPhoneOS7.0.sdk . Pegue iPhoneOS6.1.sdk con él.

  4. Ahora cierre el Buscador e inicie Xcode 5. Vaya a project target setting -> Build Setting y encuentre Base SDK. Seleccione iOS 6.1 como Base SDK. Esto también funcionará para 6.0. Solo necesitas encontrar iPhoneOS6.0.sdk .

  5. Ahora verá el nombre del dispositivo dos veces en el cuadro desplegable Ejecutar. Uno para SDK 7.0 y otro para SDK 6.1. Ahora puede ejecutar ambas forms con iOS 6 SDK y iOS 7 SDK.

Espero que esto ayude a alguien.

Recientemente tuve que resolver un problema similar, y lo abordé de una manera ligeramente diferente …

El enfoque era utilizar un controller de vista extra que actuaba como un controller de vista de contenedor para lo que originalmente era mi rootViewController. Primero, instalé un contenedor como este:

 _containerView = [[UIView alloc] initWithFrame:[self containerFrame]]; _containerView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; _containerView.clipsToBounds = YES; [self.view addSubview:_containerView]; [self.view setBackgroundColor:[UIColor blackColor]]; [UIApplication.shanetworkingApplication setStatusBarStyle:UIStatusBarStyleLightContent animated:NO]; 

donde the containerFrame se definió así:

 - (CGRect)containerFrame { if ([MyUtilityClass isSevenOrHigher]) { CGFloat statusBarHeight = [MyUtility statusBarHeight]; //20.0f return CGRectMake(0, statusBarHeight, self.view.bounds.size.width, self.view.bounds.size.height - statusBarHeight); } return self.view.bounds; } 

Finalmente, agregué lo que originalmente era my rootViewController como un childViewController del nuevo:

 //Add the ChildViewController self.childController.view.frame = self.containerView.bounds; self.childController.view.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; [self addChildViewController:self.childController]; [self.containerView addSubview:self.childController.view]; [self.childController didMoveToParentViewController:self]; 

Aspectos a tener en count: – Los controlleres de vista modal todavía se presentarán en el estilo iOS7, por lo que debo explicarlo de alguna manera.

Espero que esto ayude a alguien!

Esta guía me ayuda.

http://www.doubleencore.com/2013/09/developers-guide-to-the-ios-7-status-bar/

La forma más sólida de manejar la diferencia de tamaño de 20 puntos es el layout automático.

Si no está utilizando Auto Layout, Interface Builder le proporciona las herramientas para manejar la diferencia de tamaño de pantalla entre iOS 7 y las versiones anteriores. Cuando el layout automático está desactivado, notará un área en la pestaña de dimensionamiento del área de utilidad (panel derecho) de Interface Builder que le permite configurar iOS 6/7 Deltas.

1) ¡ Es un truco, pero funciona!

Úselo si no usa UIAlertView o KGStatusBar !!!

 #import <objc/runtime.h> @interface UIScreen (I_love_ios_7) - (CGRect)bounds2; - (CGRect)boundsForOrientation:(UIInterfaceOrientation)orientation; @end @implementation UIScreen (I_love_ios_7) - (CGRect)bounds2 { return [self boundsForOrientation:[[UIApplication shanetworkingApplication] statusBarOrientation]]; } - (CGRect)boundsForOrientation:(UIInterfaceOrientation)orientation { CGRect resultFrame = [self bounds2]; if(UIInterfaceOrientationIsLandscape(orientation)) resultFrame.size.width -= 20; else resultFrame.size.height -= 20; return resultFrame; } @end void Swizzle(Class c, SEL orig, SEL new) { Method origMethod = class_getInstanceMethod(c, orig); Method newMethod = class_getInstanceMethod(c, new); if(class_addMethod(c, orig, method_getImplementation(newMethod), method_getTypeEncoding(newMethod))) class_replaceMethod(c, new, method_getImplementation(origMethod), method_getTypeEncoding(origMethod)); else method_exchangeImplementations(origMethod, newMethod); } @implementation AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7) { Swizzle([UIScreen class], @selector(bounds2), @selector(bounds)); [application setStatusBarStyle:UIStatusBarStyleLightContent]; self.window.clipsToBounds =YES; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationDidChangeStatusBarOrientation:) name:UIApplicationWillChangeStatusBarOrientationNotification object:nil]; NSDictionary* userInfo = @{UIApplicationStatusBarOrientationUserInfoKey : @([[UIApplication shanetworkingApplication] statusBarOrientation])}; [[NSNotificationCenter defaultCenter] postNotificationName:UIApplicationWillChangeStatusBarOrientationNotification object:nil userInfo:userInfo]; } return YES; } - (void)applicationDidChangeStatusBarOrientation:(NSNotification *)notification { UIInterfaceOrientation orientation = [[notification.userInfo objectForKey: UIApplicationStatusBarOrientationUserInfoKey] intValue]; CGSize size = [[UIScreen mainScreen] boundsForOrientation:orientation].size; int w = size.width; int h = size.height; float statusHeight = 20.0; switch(orientation){ case UIInterfaceOrientationPortrait: self.window.frame = CGRectMake(0,statusHeight,w,h); break; case UIInterfaceOrientationPortraitUpsideDown: self.window.frame = CGRectMake(0,0,w,h); break; case UIInterfaceOrientationLandscapeLeft: self.window.frame = CGRectMake(statusHeight,0,w,h); break; case UIInterfaceOrientationLandscapeRight: self.window.frame = CGRectMake(0,0,w,h); break; } } @end 

2) Crear categoría y siempre usar contentView lugar de view

 @interface UIViewController(iOS7_Fix) @property (nonatomic, readonly) UIView* contentView; - (void)updateViewIfIOS_7; @end @implementation UIViewController(iOS7_Fix) static char defaultHashKey; - (UIView *)contentView { return objc_getAssociatedObject(self, &defaultHashKey)?: self.view; } - (void)setContentView:(UIView *)val { objc_setAssociatedObject(self, &defaultHashKey, val, OBJC_ASSOCIATION_RETAIN_NONATOMIC) ; } - (void)updateViewIfIOS_7 { if([[[UIDevice currentDevice] systemVersion] floatValue] < 7 || objc_getAssociatedObject(self, &defaultHashKey)) return; UIView* exchangeView = [[UIView alloc] initWithFrame:self.view.bounds]; exchangeView.autoresizingMask = self.view.autoresizingMask; exchangeView.backgroundColor = [UIColor blackColor]; UIView* view = self.view; if(self.view.superview){ [view.superview addSubview:exchangeView]; [view removeFromSuperview]; } [exchangeView addSubview:view]; self.view = exchangeView; CGRect frame = self.view.bounds; frame.origin.y += 20.0; frame.size.height -= 20.0; view.frame = frame; view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; [self setContentView:view]; } 

En cada UIViewController :

 - (void)viewDidLoad { [super viewDidLoad]; [self updateViewIfIOS_7]; UILabel* lab = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 130, 30)]; lab.backgroundColor = [UIColor yellowColor]; [self.contentView addSubview:lab]; //... } 

RetratoPaisaje