Question

Comment puis-je faire mon point de vue en réponse à redimensionner l'état en appel barre de mon nib?

Je pensais que ce serait tout simplement la définition des propriétés de changement de taille, mais ils ne sont pas activés pour le UIView racine.

(Je pense que mon principal problème ici est que je ne sais pas ce que tout cela est appelé, je ne peux trouver aucune référence à la barre d'état en appel dans l'un des documents, sauf si on parle du menu du simulateur commande.)

Était-ce utile?

La solution

Que voulez-vous dire quand vous dites que «les propriétés de changement de taille ne sont pas activés pour le UIView racine?

La barre d'état en appel n'a pas désignation spéciale particulière, et je ne pense pas qu'il y ait des API ou des notifications autour de lui. Au lieu de cela, vos points de vue devraient tout simplement être mis en place pour AutoResize correctement.

Essayez de créer une nouvelle application basée navigation dans Xcode et étudier les paramètres de AutoResize sur la vue de la table dans RootViewController.xib. Nous espérons que vous verrez un delta entre ce que l'ensemble d'Apple et ce que vous avez mis dans votre projet.

Autres conseils

iOS invoquera votre viewController de viewWillLayoutSubviews méthode chaque fois qu'il ya un changement dans la barre d'état. Vous pouvez remplacer cela et régler vos sous-vues selon les nouvelles limites.

- (void)viewWillLayoutSubviews {
    // Your adjustments accd to 
    // viewController.bounds

    [super viewWillLayoutSubviews];
}

Vous êtes à la recherche - [UIApplication statusBarFrame] et, dans votre UIApplicationDelegate, vous devez mettre en œuvre cette méthode de délégué pour être informé des cas de changement de cadre de la barre d'état:

- (void)application:(UIApplication *)application didChangeStatusBarFrame:(CGRect)oldStatusBarFrame  

Une vue ne peut pas redimensionner automatiquement avec les changements de la barre d'état de taille si vous ne disposez pas d'un jeu de contrôleur de vue racine. J'avais initialement dans mon délégué app, et mon application a fonctionné correctement à tous égards, sauf qu'il ne serait pas redimensionner correctement pendant les appels téléphoniques.

[self.window addSubview:rootController.view];

J'ai changé la ligne ci-dessus pour cela, et maintenant mon application redimensionne automatiquement pendant les appels.

[self.window setRootViewController:rootController];

J'ai découvert ce correctif après avoir vu cela dans le journal et d'enquêter sur la cause.

Application windows are expected to have a root view controller at the end of application launch

cela fonctionne pour moi parfaitement quand mon application est en cours d'exécution en arrière-plan et j'appuyez sur Commande + T. Dans mon scénario, le contrôleur racine est mon onglet contrôleur de barre et je réajuste mon contrôleur de navigation à l'intérieur de chaque onglet.

- (void)application:(UIApplication *)application willChangeStatusBarFrame:(CGRect)newStatusBarFrame{
[UIView animateWithDuration:0.35 animations:^{
    CGRect windowFrame = ((UINavigationController *)((UITabBarController *)self.window.rootViewController).viewControllers[0]).view.frame;
    if (newStatusBarFrame.size.height > 20) {
        windowFrame.origin.y = newStatusBarFrame.size.height - 20 ;// old status bar frame is 20
    }
    else{
        windowFrame.origin.y = 0.0;
    }
    ((UINavigationController *)((UITabBarController *)self.window.rootViewController).viewControllers[0]).view.frame = windowFrame;
}];

}

Pour les vues comme UITableView vous aurez généralement besoin de changer la table hauteur de la cellule, et il n'y a pas d'autre façon de le faire, sauf à mettre en œuvre Application: didChangeStatusBarFrame: . Mais il est pas trop grave, et vous peut régler la hauteur de la ligne à des valeurs non entières si vous avez besoin.

La notification pour le cadre de changement de barre d'état est

UIApplicationWillChangeStatusBarFrameNotification

Inscrivez-vous comme observateur:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(statusBarFrameWillChange:)name:UIApplicationWillChangeStatusBarFrameNotification object:nil];

Ensuite, répondre au changement dans votre gestionnaire:

- (void)statusBarFrameWillChange:(NSNotification*)notification { // respond to changes }

Même avec autolayout correctement configuré, vous devrez peut-être répondre aux changements. Par exemple, une vue de tableau qui calcule la hauteur de cellule en fonction de l'espace donné à l'écran aurait peut-être besoin de reloadData après la barre d'état a changé.

Documentation

Je faisais le même problème. Ce que je faisais était cela.

  1. Ouvrez le fichier dans IB xib
  2. Tous les éléments d'interface sont par défaut attaché à se déplacer avec des haut et montré dans la propriété « Dimensionnement automatique » dans la « Taille inspecteur ». Ainsi, pour les éléments de l'interface utilisateur au bas de l'écran, supprimer le lien du haut et au lieu de faire le lien du bas. Laissez tous les autres comme il est.
  3. Problème résolu !!!

J'espère avoir été clair.

Vous devez mettre à jour les vues manuellement si vous configurez vos cadres de vue programatically

 -(void) viewDidAppear:(BOOL)animated
{
    [[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(statusBarFrameWillChange:)name:UIApplicationWillChangeStatusBarFrameNotification object:nil];

}

- (void)statusBarFrameWillChange:(NSNotification*)notification
{
// respond to changes
NSLog(@"STATUS BAR UPDATED");
NSDictionary *statusBarDetail = [notification userInfo];
NSValue *animationCurve = statusBarDetail[UIApplicationStatusBarFrameUserInfoKey];
CGRect statusBarFrameBeginRect = [animationCurve CGRectValue];
int statusBarHeight = (UIInterfaceOrientationIsPortrait([[UIApplication sharedApplication]statusBarOrientation])) ? statusBarFrameBeginRect.size.height : statusBarFrameBeginRect.size.width;

NSLog(@"status bar height  %d", statusBarHeight);
}

-(void) viewDidDisappear:(BOOL)animated
{
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationBackgroundRefreshStatusDidChangeNotification object:nil];
}

Cela vous donne la nouvelle hauteur de la barre d'état et d'utiliser ce que vous pouvez mettre à jour vos images en conséquence.

La solution est de vous assurer que vous avez la clé de la fenêtre:

[window makeKeyAndVisible];

Si vous ne faites pas que la sous-vue ne soit pas automatiquement redimensionnée, mais il n'y a pas d'autres symptômes pour autant que je sais.

Aucune des solutions postØes avant travaillé pour moi. Qu'est-ce que le travail pour moi est que je n'ai pas mes contraintes mis en place correctement pour mon point de vue. Dans ma situation, j'avais deux vues différentes de conteneurs à l'intérieur de mon point de vue.

Vue sur scène story-board.

Le fond (dans la liste) vue conteneur était un UITableView, qui n'a pas été correctement défilement vers le bas de la table. La raison en est que le décalage de l'état en appel barre était à l'origine de l'origine (coin supérieur gauche) du UITableView changer, mais la taille demeurerait la même. Cela signifie que le fond de la table était hors de l'écran!

La solution a été de régler correctement le Autoresizing contrainte de hauteur correctement. Dans la capture d'écran ci-dessous, ce sont les flèches verticales au milieu du Autoresizing boîte.

entrer image description ici

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top