Domanda

Ho una barra di navigazione in un applicazione per iPhone con un UIBarButtonItems personalizzati in esso:

UIBarButtonItem* homePersonButton = [[UIBarButtonItem alloc]
       initWithImage:[UIImage imageNamed:@"homePerson.png"]
               style:UIBarButtonItemStylePlain
              target:self action:@selector(showHomePerson)];

Il homePerson.png è di 20 x 18.

Si guarda bene in modo verticale, ma in modalità orizzontale l'immagine 20x18 sul pulsante è troppo alto per un aspetto gradevole. Sembra che iOS fa un certo lavoro sulle loro pulsanti standard per ridurre l'immagine come necessario quando si è in una sottile barra di navigazione.

Qual è il modo migliore per gestire questo?

Un altro esempio è quando ho un pulsante personalizzato nel titleView della barra di navigazione. Ho bisogno di ridursi così quando la rotazione app.

Grazie in anticipo per qualsiasi puntatori potete darmi!

È stato utile?

Soluzione

La dimensione dell'immagine bar una barra degli strumenti di navigazione e di è di 20 x 20 in modo che quando si sta fornendo un'immagine che non soddisfa queste dimensioni si sta lasciando fino al quadro per ridimensionare / scalare l'immagine che sta causando il problema. Ridimensiona / scala l'immagine a 20x20 e la vostra immagine dovrebbe apparire corretto sia in verticale che orizzontale.

Altri suggerimenti

steipete menzionato questo nei commenti, ma mi sento come se ha bisogno di essere una risposta ora. Come di iOS 5, è possibile utilizzare il UIBarButtonItem initializer :

- initWithImage:landscapeImagePhone:style:target:action:

Proprio immagine landscapeImagePhone insieme ad una versione più piccola dell'immagine che si desidera ridimensionata nel paesaggio.

Dopo alcuni test, ho notato che l'iPhone fa ridursi lungo la barra di navigazione e quindi i UIBarButtonItems sulla barra di navigazione, ma l'iPhone 6 Plus non . Il 6 Plus sembra mantenere la barra di navigazione ad un'altezza di 44px, mentre il regolare iPhone si restringe verso il basso per 32px. A causa di questo, il 6 Plus anche non utilizzare il landscapeImagePhone nel paesaggio.

Ho provato questo, non solo utilizzando un'immagine di formato più piccolo per landscapeImagePhone, ma un'immagine completamente diversa. L'immagine non è mai cambiato in 6 Plus.

Tuttavia, essere consapevoli di quanto segue come di iOS 9.2 su iPhone 6 Plus:

Il documentazione Apple per l'afferma inizializzazione che landscapeImagePhone è:

  

L'immagine da utilizzare per la voce nei bar del paesaggio nel linguaggio UIUserInterfaceIdiomPhone.

A partire da iOS 9.2, il 6 Plus fa rapporto come UIUserInterfaceIdiomPhone sia in verticale e orizzontale. Prima, il 6 Plus usato per essere UIUserInterfaceIdiomUnspecified. Io non sono esattamente sicuro quando che è stato aggiornato. Ma, dal momento che è ormai UIUserInterfaceIdiomPhone, secondo la documentazione, la landscapeImagePhone dovrebbe applicarsi al 6 Plus pure.

Quindi, forse non si basa tanto sulla UIUserInterfaceIdiom tanto quanto lo fa l'altezza della barra di navigazione. Non lo so per certo. Nota Solo che questa incoerenza può essere "fissato" nel futuro e quindi causare un comportamento diverso.

Non ho problema simile. Ora io uso il tipo personalizzato a pulsante. per esempio. ecco il mio catalogo di UIBarButtonItem. si può utilizzare per costruire un pulsante della barra personalizzata.

+ (UIBarButtonItem*)barItemWithImage:(UIImage*)image highlightedImage:(UIImage *)highlightedImage     target:(id)target action:(SEL)action{
    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
    [button setBackgroundImage: [image stretchableImageWithLeftCapWidth:7.0 topCapHeight:0.0] forState:UIControlStateNormal];
    button.frame= CGRectMake(0.0, 0.0, image.size.width, image.size.height);
    [button addTarget:target action:action forControlEvents:UIControlEventTouchUpInside];
    UIBarButtonItem *barItem = [[UIBarButtonItem alloc] initWithCustomView:button];

    return barItem;
}

Quindi è possibile regolare la visualizzazione personalizzata telaio bar Button quando la rotazione.

tip:

  1. nel metodo rotate, ad esempio willAnimateRotationToInterfaceOrientation, stampare la visualizzazione personalizzata incorniciare sulle voci dei tasti barra di navigazione .., e ottenere la corretta telaio (in modalità protrait) che si desidera, anche, si può vedere il telaio è non corretta in modalità orizzontale, abbiamo bisogno di risolvere il problema.
  2. risolvere il problema barra di paesaggio fotogramma pulsante facendo riferimento al valore di frame corretto.

Nel mio caso, ho appena semplice correzione l'origine della visualizzazione personalizzata ... per esempio.

// adjust the navigation Item top, otherwise it is not proper set after rotation
_centralRootViewController.navigationItem.leftBarButtonItem.customView.top = 5;
_centralRootViewController.navigationItem.rightBarButtonItem.customView.top = 5;

Nota:. Alto è la y del telaio

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top