Frage

Ich habe eine Navigationsleiste in einem iPhone-App mit einer benutzerdefinierten UIBarButtonItems drin:

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

Die homePerson.png ist 20 x 18.

Es sieht gut aus im Portrait-Modus, sondern im Querformat das 20x18 Bild auf der Taste ist zu groß, um schön aussehen. Es sieht aus wie iOS einige Arbeit auf ihren Standard-Tasten macht das Bild schrumpfen je nach Bedarf, wenn es in einer dünneren Navigationsleiste ist.

Was ist der beste Weg, dies zu umgehen?

Ein weiteres Beispiel ist, wenn ich eine benutzerdefinierte Schaltfläche in der Titleview der Navigationsleiste haben. Ich brauche es auch, wenn die App dreht sich zu schrumpfen.

Vielen Dank im Voraus für alle Hinweise können Sie mir geben!

War es hilfreich?

Lösung

Die Größe einer Symbolleiste und Navigationsleiste Bild ist 20 x 20 so, wenn Sie ein Bild sind die Bereitstellung, die nicht diese Dimensionen nicht erfüllen Sie mit dem Rahmen gehen bis zu skalieren / skalieren Ihr Bild, das Ihr Problem verursacht. Resize / skalieren Ihr Bild 20x20 und Ihr Bild sollte in Hoch- und Quer korrekt aussehen.

Andere Tipps

steipete erwähnte dies in den Kommentaren, aber ich fühle mich wie es jetzt eine Antwort sein muss. Ab iOS 5 können Sie die UIBarButtonItem initializer :

- initWithImage:landscapeImagePhone:style:target:action:

Just Satz landscapeImagePhone Bild auf eine kleinere Version des Bildes Sie in der Landschaft der Größe verändert werden sollen.

Nach einigen Tests, bemerkte ich, dass das iPhone funktioniert die Navigationsleiste schrumpfen und damit die UIBarButtonItems auf der Navigationsleiste, aber das iPhone 6 Plus nicht . Die 6 Plus scheint in einer Höhe von 44px, die Navigationsleiste zu halten, während die regelmäßige iPhone es schrumpft auf 32px nach unten. Aus diesem Grunde, die 6 Plus auch nicht verwenden, um die landscapeImagePhone in Landschaft.

Getestet habe ich diese durch nicht nur eine kleinere Größe für landscapeImagePhone verwenden, aber ein ganz anderes Bild. Das Bild nie geändert am 6 Plus.


jedoch bewusst sein, die folgenden als von iOS 9.2 auf dem iPhone 6 Plus:

Die Apple-Dokumentation für diese Staaten initializer dass landscapeImagePhone ist:

  

Das Bild für das Element in der Landschaft Bars in dem UIUserInterfaceIdiomPhone Idiom verwendet werden.

Wie von iOS 9.2, die 6 Plus tut Bericht als UIUserInterfaceIdiomPhone im Portrait und Landschaft. Bevor die verwendeten 6 Plus UIUserInterfaceIdiomUnspecified zu sein. Ich bin mir nicht ganz sicher, wann das aktualisiert wurde. Aber da es nun UIUserInterfaceIdiomPhone ist, entsprechend der Dokumentation sollte die landscapeImagePhone auf die 6 gelten Plus-als auch.

Vielleicht ist es nicht so sehr auf die UIUserInterfaceIdiom so viel verlassen, wie er auf der Höhe der Navigationsleiste der Fall ist. Ich bin mir nicht sicher. Es genügt zu bemerken, dass diese Inkonsistenz in der Zukunft „fest“ kann und somit bewirken, dass ein anderes Verhalten.

Ich habe ähnliches Problem. Jetzt benutze ich den benutzerdefinierten Typ-Taste. z.B. hier ist mein Katalog UIBarButtonItem. Sie können es verwenden, um eine benutzerdefinierte Bar-Taste zu bauen.

+ (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;
}

Dann können Sie die Bar-Knopf benutzerdefinierte Ansicht Rahmen anpassen, wenn sich drehen.

Tipp:

  1. in den rotate Verfahren, z.B. willAnimateRotationToInterfaceOrientation, drucken Sie die benutzerdefinierte Ansicht Rahmen der Navigationsleiste Taste, um Elemente .. und erhalten die richtige Rahmen (in protrait-Modus) Sie wollen, auch, können Sie den Rahmen sehen ist falsch in Landscape-Modus, müssen wir es beheben.
  2. fixiert die Landschaft bar Schaltfläche Rahmen Ausgabe von auf den richtigen Rahmenwert verweisen.

in meinem Fall, ich nur einfache Lösung des Ursprung der benutzerdefinierten Ansicht ... z.

// 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;

. Hinweis: oben ist die y-Rahmen

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top