Je migre mon application vers iOS 7. Pour résoudre le problème lié à la barre d'état, j'ai ajouté ce code.
if([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0f)
{
CGRect frame = self.navigationController.view.frame;
if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
{
frame.Origin.y = 20;
}
else
{
frame.Origin.x = 20;
}
[self.navigationController.view setFrame:frame];
}
Cela fonctionne bien dans des cas normaux. Si je change d'orientation (l'application ne prend en charge que l'orientation paysage) ou si je présente un contrôleur de vue et quitte le contrôleur de modèle, l'alignement de celui-ci a été modifié. La barre d'état recouvre à nouveau mon contrôleur de vue. Ce morceau de code ne fonctionne pas du tout. Veuillez me guider pour résoudre ce problème de barre d’état.
Cas 2: Voici comment je présente mon contrôleur de vue
ZBarReaderViewController *reader = [ZBarReaderViewController new];
reader.readerDelegate = self;
if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
reader.supportedOrientationsMask = ZBarOrientationMaskLandscape;
else
reader.supportedOrientationsMask = ZBarOrientationMaskPortrait;
[self presentModalViewController:reader animated:YES];
Ref:
Merci d'avance.
Correction du problème de la barre d'état dans IOS 7
Finalement, j'ai corrigé la barre d'état au-dessus du tour au moyen de la propriété delta value dans xcode5. D'abord, j'ai origine augmentée - y 20pxl par rapport à tout le contrôleur utilisé dans le Xib (il semble fonctionner correctement uniquement dans IOS 7), après cela i - définissez la valeur delta pour tout le contrôleur de vue Origine -y sur -20, cela fonctionne correctement dans ios 6 et IOS 7.
Étapes pour le faire.
Xcode 5 fournit une option de prévisualisation pour afficher l'apparence de xib dans une vue différente en fonction de la version du système d'exploitation.
choisissez l'option de prévisualisation de l'éditeur assistant
assistant éditeur de clic
et choisissez l’option de prévisualisation pour prévisualiser le contrôleur de vue sélectionné dans une version différente.
view controller option d'aperçu de la vue.
dans l'aperçu, vous pouvez trouver l'option de basculement pour prévisualiser la vue dans une version différente. Dans l'aperçu, vous pouvez clairement sentir le problème de la barre d'état s'il n'est pas corrigé correctement en basculant la version.
Trois étapes pour résoudre le problème de la barre d’état: étape 1: Assurez-vous que voyez nous cibler 7.0 et plus tard dans l’inspecteur de fichier.
Étape 2: Augmenter l’origine - y de 20 pixels (exactement la taille de la barre d’état) pour tous les contrôles ajoutés dans le contrôleur de vue.
Étape 3: Définissez la valeur delta de Origin y sur -20 pour tous les contrôles alors seul celui-ci s’ajustera automatiquement en fonction de la version. Utilisez l'aperçu maintenant et ressentez les différences que les contrôles ajustent automatiquement en raison de la valeur delta.
ne fois le problème résolu dans la barre d'état, le problème lors de la présentation de la vue modèle (contrôleur ZbarSDk) est également résolu automatiquement.
Écran de prévisualisation:
Je suis en retard pour cette réponse, mais je veux juste partager ce que j'ai fait, ce qui est fondamentalement
the solution la plus simple
Premier de tous-> Allez à votre info.plist File
et ajouter un style de barre d'état-> style de noir transparent (Alpha de 0,5)
Maintenant, ça y est: -
Ajoutez ce code dans votre AppDelegate.m
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
//Whatever your code goes here
if(kDeviceiPad){
//adding status bar for IOS7 ipad
if (IS_IOS7) {
UIView *addStatusBar = [[UIView alloc] init];
addStatusBar.frame = CGRectMake(0, 0, 1024, 20);
addStatusBar.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:1]; //change this to match your navigation bar
[self.window.rootViewController.view addSubview:addStatusBar];
}
}
else{
//adding status bar for IOS7 iphone
if (IS_IOS7) {
UIView *addStatusBar = [[UIView alloc] init];
addStatusBar.frame = CGRectMake(0, 0, 320, 20);
addStatusBar.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:1]; //You can give your own color pattern
[self.window.rootViewController.view addSubview:addStatusBar];
}
return YES;
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
// Override point for customization after application launch.
self.viewController = [[[ViewController alloc] initWithNibName:@"ViewController" bundle:nil] autorelease];
self.window.rootViewController = self.viewController;
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7) {
[application setStatusBarStyle:UIStatusBarStyleLightContent];
[application setStatusBarHidden:NO withAnimation:UIStatusBarAnimationFade];
self.window.clipsToBounds =YES;
self.window.frame =CGRectMake(0,20,self.window.frame.size.width,self.window.frame.size.height-20);
}
[self.window makeKeyAndVisible];
return YES;
}
définir ce qui suit sur info.plist
Apparence de la barre d'état du contrôleur d'affichage = NO;
Entendez que nous pouvons le faire pour tous les points de vue à la fois
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Notification for the orientaiton change
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(applicationDidChangeStatusBarOrientation:)
name:UIApplicationDidChangeStatusBarOrientationNotification
object:nil];
// Window framing changes condition for iOS7 or greater
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7) {
statusBarBackgroundView = [[UIView alloc] initWithFrame:CGRectMake(0, -20, self.window.frame.size.width, 20)];//statusBarBackgroundView is normal uiview
statusBarBackgroundView.backgroundColor = [UIColor colorWithWhite:0.000 alpha:0.730];
[self.window addSubview:statusBarBackgroundView];
self.window.bounds = CGRectMake(0, -20, self.window.frame.size.width, self.window.frame.size.height);
}
// Window framing changes condition for iOS7 or greater
self.window.rootViewController = navigationController;
[self.window makeKeyAndVisible];
return YES;
}
Et pendant que nous utilisons l'orientation, nous pouvons ajouter la méthode ci-dessous dans le délégué de l'application pour la définir via l'orientation.
- (void)applicationDidChangeStatusBarOrientation:(NSNotification *)notification
{
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7) {
statusBarBackgroundView.hidden = YES;
UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation;
int width = [[UIScreen mainScreen] bounds].size.width;
int height = [[UIScreen mainScreen] bounds].size.height;
switch (orientation) {
case UIInterfaceOrientationLandscapeLeft:
self.window.bounds = CGRectMake(-20,0,width,height);
statusBarBackgroundView.frame = CGRectMake(-20, 0, 20, height);
break;
case UIInterfaceOrientationLandscapeRight:
self.window.bounds = CGRectMake(20,0,width,height);
statusBarBackgroundView.frame = CGRectMake(320, 0, 20, height);
break;
case UIInterfaceOrientationPortraitUpsideDown:
statusBarBackgroundView.frame = CGRectMake(0, 568, width, 20);
self.window.bounds = CGRectMake(0, 20, width, height);
break;
default:
statusBarBackgroundView.frame = CGRectMake(0, -20, width, 20);
self.window.bounds = CGRectMake(0, -20, width, height);
break;
}
statusBarBackgroundView.hidden = NO;
}
}
Vous devriez ajouter ci-dessous la catégorie de contrôleur de navigation correspondante
.h
#import <UIKit/UIKit.h>
#import <QuartzCore/QuartzCore.h>
@interface UINavigationController (iOS6fix)
@end
.m
#import "UINavigationController+iOS6fix.h"
@implementation UINavigationController (iOS6fix)
-(BOOL)shouldAutorotate
{
return [[self.viewControllers lastObject] shouldAutorotate];
}
-(NSUInteger)supportedInterfaceOrientations
{
return [[self.viewControllers lastObject] supportedInterfaceOrientations];
}
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
return [[self.viewControllers lastObject] preferredInterfaceOrientationForPresentation];
}
@end
BEAUCOUP BEAUCOUP réponse plus simple:
Alignez le haut de votre vue sur le "Guide de mise en page supérieur", mais faites glisser le "Guide de mise en forme supérieur" sur votre vue et définissez la contrainte "verticale". Voir cette réponse pour une référence d'image.
La façon dont cela fonctionne est la suivante: le "Guide de mise en page supérieur" s'ajustera automatiquement lorsque la barre d'état est présente ou absente, et tout fonctionnera sans code requis!
P.S. Dans cet exemple particulier, l'arrière-plan situé au bas de l'écran doit également être résolu en définissant une contrainte verticale appropriée du fond de la vue, à son aperçu, ou peu importe ...
Pour masquer la barre d'état dans iOS 7, suivez ces étapes simples:
Dans Xcode, allez dans le dossier "Resources
" et ouvrez le dossier "(app name)-Info.plist file
".
View controller based status bar appearance
"et définissez sa valeur" NO
"Status bar is initially hidden
"et définissez sa valeur" YES
"Si les clés ne sont pas là, vous pouvez les ajouter en sélectionnant "information property list
"en haut et cliquez sur l'icône +
j'ai résolu cela en utilisant le code ci-dessous
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
if(landScape mode)
if ([UIDevice currentDevice].systemVersion.floatValue>=7) {
CGRect frame = self.window.frame;
frame.size.width -= 20.0f;
frame.Origin.x+= 20.0f;
self.window.frame = frame;
}
if(portrait)
if ([[[UIDevice currentDevice]systemVersion]floatValue] >= 7.0) {
[application setStatusBarStyle:UIStatusBarStyleLightContent];
CGRect frame = self.window.frame;
frame.Origin.y += 20.0f;
frame.size.height -= 20.0f;
self.window.frame = frame;
}
return YES;
}
#define _kisiOS7 ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0)
if (_kisiOS7)
{
[[UINavigationBar appearance] setBarTintColor:_kColorFromHEX(@"#011C47")];
}
else
{
[[UINavigationBar appearance] setBackgroundColor:_kColorFromHEX(@"#011C47")];
[[UINavigationBar appearance] setTintColor:_kColorFromHEX(@"#011C47")];
}
il suffit de définir le code suivant dans viewWillAppear
.
if ([[[UIDevice currentDevice] systemVersion] floatValue]<= 7) {
self.edgesForExtendedLayout = UIRectEdgeNone;
}
Avec Salesforce SDK 2.1 (Cordova 2.3.0), nous devions procéder comme suit pour que la barre d'état apparaisse sur le chargement initial de l'application et revienne de l'arrière-plan (iPhone et iPad):
Contrairement aux autres solutions publiées ici, celle-ci semble survivre à la rotation de l'appareil.
1 -Créer une catégorie de SFHybridViewController
#import "SFHybridViewController+Amalto.h"
@implementation SFHybridViewController (Amalto)
- (void)viewWillAppear:(BOOL)animated
{
//Lower screen 20px on ios 7
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7) {
CGRect viewBounds = self.view.bounds;
viewBounds.Origin.y = 20;
viewBounds.size.height = viewBounds.size.height - 20;
self.webView.frame = viewBounds;
}
[super viewWillAppear:animated];
}
- (void)viewDidLoad
{
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7) {
CGRect viewBounds = self.view.bounds;
viewBounds.Origin.y = 20;
viewBounds.size.height = viewBounds.size.height - 20;
self.webView.frame = viewBounds;
}
[super viewDidLoad];
}
@end
2 -Ajouter à AppDelegate.m
importations
#import "SFHybridViewController+Amalto.h"
3 -Injecter à la fin de la méthode didFinishLaunchingWithOptions
de AppDelegate
//Make the status bar appear
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7) {
[application setStatusBarStyle:UIStatusBarStyleLightContent];
[application setStatusBarHidden:NO withAnimation:UIStatusBarAnimationFade];
}
4 -Ajouter à App-Info.plist
la propriété
View controller-based status bar appearance
avec la valeur NO
Il y a plusieurs manières différentes. Une approche consiste à utiliser le fichier .plist
Cela masquera la barre d'état tout au long du projet.