8
votes

UinavigationBar et nouvelle API d'apparence iOS 5+ - Comment fournir deux images de fond?

Je veux exploiter la nouvelle API d'apparence iOS 5 pour fournir des images de fond personnalisées dans toutes les instances d'UinavigationBar dans mon application. Pour ce faire, c'est aussi simple que ceci: xxx

Toutefois, pour chaque instance, je souhaite fournir une image différente en fonction de la valeur de la propriété translucide , Par exemple, xxx

étant donné que les API d'apparence semblent être configurées à l'aide de méthodes de classe, est quelque chose comme ça possible?


0 commentaires

6 Réponses :


4
votes

Vous pouvez soit la définir globalement avec le proxy d'apparence de classe ou la définir sur une instance d'une barre NAV.

Je définit actuellement l'arrière-plan sur une instance de la barre de navigation et semble fonctionner. J'ai deux navbars différents avec des antécédents différents. Si vous le définissez sur une instance, vous devriez être capable de conditionner le code. P> xxx pré>

Si vous souhaitez définir à l'aide de la méthode de la classe, vous pouvez définir pour tous: P>

[[UINavigationBar appearance] setBackground ...


4 commentaires

J'essaie de réaliser cela globalement, pour toute instance d'uoinavégationbar, de sorte que les méthodes d'instance ne le coupent pas - essentiellement, je souhaite utiliser la méthode de classe, mais devez-la définir une image différente basée sur la valeur de la propriété translucide lorsque L'apparence proxy s'applique à chaque instance ... Je pense que je suis probablement pas de chance ...


Je ne suis pas au courant d'une façon de faire cela autre que le faire sur le niveau d'instance - qui vous a laissé tomber votre code BU, vous pourriez avoir une méthode courante qui le fait.


L'autre chose que je cherchais était l'apparence qui, mais je ne pense pas que cela vous aide, que ce soit, car c'est plus sur le type de vision qu'il est sous contrôle de quelle apparition à utiliser ...


Vous pouvez envisager une sous-classe de la barre d'uoinavigation, de l'uoinavigationbarTransLucence ou de l'autre, et utilisez la méthode de la classe d'apparenceOrcontainé. Toujours une douleur, mais vous n'avez alors pas à "litière" votre code pour des instances spécifiques.



4
votes

Pour le moment, il n'y a aucun moyen de faire ce que vous décrivez - le proxy d'apparence ne connaît rien d'une instance particulière au moment où vous l'appelez.

en termes pratiques, ce que vous aurez probablement besoin de faire, c'est préciser le nombre de barres translucides que vous auriez c. Combien de personnes non translucides que vous avez eues. Choisissez que vous avez plus d'informations et utilisez le proxy d'apparence pour celui-ci - pour les autres, lorsque vous allez le rendre translucide (ou demander une mise en page en plein écran), vous devrez définir l'image d'arrière-plan.

Entre-temps, pourriez-vous déposer une demande d'amélioration chez http://bugrepor.apple.com/ Pour ce que vous demandez? Ce n'est pas une demande déraisonnable. Merci!


1 commentaires

Oui, c'est à peu près ce que j'ai imaginé au cours des dernières minutes ... merci.



1
votes

Cette réponse ne vous sera probablement pas beaucoup d'aide, mais cela peut être envers les autres. Si vous faites une sous-classe, vous pouvez spécifier l'apparence de chaque sous-classe séparément. Par exemple, j'ai UitablesViewCells et une classe personnalisée dérivée d'UitablesViewCells. En fait, je fais cela pour une raison, mais j'ai découvert que je dois appeler [[[...] Setfont: [...]] pour les deux classes spécifiquement.

Depuis que vous semblez vouloir le faire en fonction d'une variable que vous ne saurez pas avant l'exécution, vous êtes probablement mal de la chance!


0 commentaires

1
votes

Vous pouvez le faire comme ceci si vous savez quelles classes contiennent les barres translucides: xxx


0 commentaires

0
votes

Je ne peux pas laisser un commentaire alors devra être une réponse. Rob Whitlow a écrit un excellent article à ce sujet. Vérifiez-le: http: // iOS-blog. co.uk/Tutorials/ios-custom-ui-series-tabbar-navbar/


0 commentaires

0
votes

Essayez ceci:

if (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_6_1) {


        // Load resources for iOS 6.1 or earlier

         navigationController1 = [self customizedNavigationController];
         [navigationController1 setViewControllers:[NSArray arrayWithObject: self.homeViewController]];

         [self setNavigationController:navigationController1];
         [self.window setRootViewController:navigationController];


    } else {
        // Load resources for iOS 7 or later
         navigationController1 = [[UINavigationController alloc] initWithRootViewController:self.homeViewController];
          [self.window setRootViewController:navigationController1];
    }


  - (UINavigationController *)customizedNavigationController {

     UINavigationController *navController = [[UINavigationController alloc]   initWithNibName:nil bundle:nil];

    // Ensure the UINavigationBar is created so that it can be archived. If we do not access the
    // navigation bar then it will not be allocated, and thus, it will not be archived by the
    // NSKeyedArchvier.
    [navController navigationBar];

    // Archive the navigation controller.
    NSMutableData *data = [NSMutableData data];
    NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
    [archiver encodeObject:navController forKey:@"root"];
    [archiver finishEncoding];

    // Unarchive the navigation controller and ensure that our UINavigationBar subclass is used.
    NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
    [unarchiver setClass:[LNTNavigationBar class] forClassName:@"UINavigationBar"];
    UINavigationController *customizedNavController = [unarchiver decodeObjectForKey:@"root"];
    [unarchiver finishDecoding];

    // Modify the navigation bar to have a background image.
    LNTNavigationBar *navBar = (LNTNavigationBar *)[customizedNavController navigationBar];
    [navBar setTintColor:[UIColor colorWithRed:0.39 green:0.72 blue:0.62 alpha:1.0]];
    [navBar setBackgroundImage:[UIImage imageNamed:@"nav_bar_1024_46.png"] forBarMetrics:UIBarMetricsDefault];
    [navBar setBackgroundImage:[UIImage imageNamed:@"nav_bar_1024_46.png"] forBarMetrics:UIBarMetricsLandscapePhone];

    return customizedNavController;
}


0 commentaires