6

ich einen Titleview meine navigationItem in Code sehr leicht hinzufügen:Hinzufügen navigationItem.titleView in Storyboard versagt

UIImageView *navImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"nav_logo"]]; 
UIView *titleView = [[UIView alloc] initWithFrame:navImageView.frame]; 
[titleView addSubview:navImageView]; 
self.navigationItem.titleView = titleView; 

aber ich versuche, dies in meinem Drehbuch zu tun, und kläglich am versagt.

Hier ist, was ich getan habe:

  1. Ziehen und eine UIView auf meinem VC Navigation Artikel fallen.
  2. Ziehen und eine UIImageView auf der die Bildeigenschaft des UIImageView

Set UIView

  • Add Breite/Höhe/Vorlauf-/Top-Einschränkungen
  • fallen Ich habe auch den Hintergrund meiner UIView rot (gut in Ordnung, eher wie eine gebrannte Orange), um das Problem zu veranschaulichen.

    Hier ist, wie die Dinge machen aus:

    enter image description here

    Ich bin überrascht, dass das so schwierig war. Irgendwelche Ideen?

  • Antwort

    5

    Es ist nicht möglich, Beschränkungen für automatische Layouts für Navigationselemente in einem Storyboard festzulegen. Ich glaube, Sie ziehen die Ansichten tatsächlich auf den tatsächlichen View-Controller. Sie können nur barButtonItems in das navigationItem ziehen.

    Eine alternative Möglichkeit ist,

    1. die Ansicht in einem separaten xib erstellen ohne mit automatischen Layout
    2. laden xib in Code
    3. setTranslatesAutoresizingMaskIntoConstraints zu wahr
    4. Weisen Sie den Titleview zu die Ansicht

    Aus meiner Erfahrung funktioniert die Verwendung von Auto-Layout mit beliebigen Ansichten in der navigationBar nicht gut und führt zu unerwarteten Ergebnissen. Zum Beispiel stieß ich auf Fehler, bei denen das Präsentieren eines UIActivityViewControllers unerwartete Einschränkungen zum TitelView des navigationItems hinzufügte.

    Vorher: enter image description here

    Nach UIActivityViewController präsentiert und das Überspringen Schritt 3: enter image description here

    15

    Im Storyboard Interface Builder

    • dem Controller Ansicht wählen
    • Im Attributinspektor (⌘⌥ 4), unter "Simulierte Metriken", für die "Top Bar" Selektor, wählen Sie eine der Navigationsleisten
    • Dann sollten Sie eine UIView über den Titel auf dem Storyboard ziehen können,
    • Sie können die „Top Bar“ auf „Inferred“ ändern zurück, wenn Sie

    möchten hier ist ein Bild des Storyboards nach einem UIView über den Titel ziehen:

    after dragging UIView over the title

    0

    Dieses seltsame Problem hat eine Beziehung mit Größenklassen.

    In der Tat hatte ich das gleiche Problem und die Lösung war:

    1. Stellen Sie die Größenklasse für das Storyboard zu Any,Any
    2. Ziehen Sie die Ansicht in der Navigationsleiste Element.
    3. Setzen Sie die Größenklasse Ihres Storyboards zurück.

    Und alles funktioniert wie ein Charme!

    Ich denke, das Hinzufügen der Ansicht zum Navigationselement mit einer nicht auf Any,Any eingestellten Größenklasse verursacht das Problem.

    Hoffe das funktioniert für alle, weil das wirklich schrecklich war: [.

    1

    Für diejenigen, die mit dem Problem des Hinzufügens benutzerdefinierte Ansicht oder UIButton in UIBarButtonItem in Xcode 8 kämpfte hier ist die Lösung: Xcode akzeptiert ziehen nur in der Ansicht Eigenschaft des Controllers jetzt (Xcode 7 erlaubt direkt auf UINavigationItem ziehen). Wenn Sie den Controller view löschen, können Sie Elemente auf die Navigationsleiste ziehen. Erstellen Sie einen neuen leeren Navigationscontroller, entfernen Sie die Hauptansicht im Stammansicht-Controller, ziehen Sie Elemente in die Navigationsleiste, kopieren Sie dieses Navigationselement (nicht die Leiste selbst) und fügen Sie es auf Ihrem Zielcontroller ein. Es ersetzt Ihre alten Navigationselemente. Nach dem Entfernen dieser leeren Controller. PROFITIEREN!

    Es scheint, Apple Xcode Team neue Aufgaben für Entwickler mit noch mehr Leidenschaft als ihr Hauptprodukt produzieren.