2017-09-20 2 views
2

Ich habe einen benutzerdefinierten Navigationselementtitel, bei dem es sich einfach um zwei übereinander liegende Beschriftungen handelt, die aus einer .xib-Datei geladen werden.Benutzerdefinierter Nav-Titel-Offset ios 11

enter image description here

Es ist durch den Aufruf dieser geladen:

class Utilities { 
    /// Title and subtitle format custom title in Navigation bar. Top and bottom text are centered on one another. 
    /// 
    /// - Parameters: 
    /// - navigationItem: The receiving controller's navigation item. 
    /// - titleText: Top text to be displayed a little larger and more bold. 
    /// - subtitleText: Bottom text to be displayed a little smaller and less bold. 
    class func addCustomNavigationTitle(navigationItem: UINavigationItem, titleText: String, subtitleText: String) { 
     let customNavigationTitleView = LabelSubLabelCustomHeaderView.instanceFromNib() as! LabelSubLabelCustomHeaderView 
     customNavigationTitleView.titleLabel.text = titleText 
     customNavigationTitleView.dateLabel.text = subtitleText 
     navigationItem.titleView = customNavigationTitleView 
    } 
    ... 
} 

Es ist definiert als das:

class LabelSubLabelCustomHeaderView: UIView { 
    @IBOutlet var titleLabel: UILabel! 
    @IBOutlet var dateLabel: UILabel! 

    class func instanceFromNib() -> UIView { 
     return UINib(nibName: "LabelSubLabelCustomHeaderView", bundle: nil).instantiate(withOwner: nil, options: nil)[0] as! UIView 
    } 
} 

Jetzt ist es genau um 22 Pixel nach unten gedrückt, die den Boden Etikett verbirgt.

Ich muss den Rahmen dieser Ansicht in der viewDidAppear setzen, um es gerade zu setzen. Ich habe ViewWillAppear und einige andere Dinge ausprobiert. Ich muss es buchstäblich verstecken, einstellen und dann zeigen, was eindeutig nicht stimmt.

Vor iOS 11 funktionierte das kein Problem.

Hier ist sie nun, ohne meinen Hack fix, was ich hoffe ich richtig machen kann:

enter image description here

Und hier ist, wie es aussehen soll, wie es vor dem iOS sah 10 und wie es mit meinem Hack fix aussieht:

enter image description here

bitte beachten sie auch, dass, wenn der Abwickler segue belebt, die im Hinblick auf den falschen Rahmen geht zurück, 22 Pixel zu niedrig zu sein. Wie kann ich das beheben? Danke für jede Hilfe im Voraus.

Edit: Detailliertere Constraint Info:

View DateLabel

TitleLabel

+0

Ich glaube, der Fehler/die Lösung wird in Ihren Layoutbeschränkungen enthalten sein, jede Chance, dass Sie zeigen könnten, was Sie bisher definiert haben? – ekscrypto

+0

Danke. Deshalb habe ich den Screenshot mit den Einschränkungen versehen, aber ich kann weiter gehen und einen detaillierteren Screenshot zeigen ... Ich werde den ursprünglichen Post bearbeiten, denke ich ... –

+0

Okay, ich habe mehr Screenshots gemacht. Beachten Sie, dass diese Datei von .xib geladen und als benutzerdefinierte Titelansicht für Navigation Item festgelegt wird. Ich weiß nicht, wie man die Beschränkungen für die geladene Ansicht einstellt, oder ob das überhaupt möglich ist. Ich würde denken, dass das Navigationselement das für mich tut. Auf jeden Fall hat es mit den aktuellen Einschränkungen vor iOS 11 gut funktioniert. –

Antwort

1

Sie sollten eine Layout-Einschränkung in der benutzerdefinierten Ansicht Titel Xib einen Mindestabstand zwischen dem unteren Etikett zum sicheren hinzufügen Durchsetzung Bereich der Ansicht. Ein vollständiges Arbeitsbeispiel zu iOS 10/11 finden Sie unter https://github.com/ekscrypto/Swift-Tutorial-Custom-Title-View

+0

Vielen Dank für die Hilfe und das Beispielprojekt. Sehr geschätzt. Ich habe jetzt ein anderes Problem mit Ihrem Beispielprojekt, mit dem Sie vielleicht helfen können. Ich werde einen neuen Thread starten. Siehe Link kommt bald. –

+0

Ich habe versucht, Ihr Projekt zu testen, damit ich die Änderungen pushen kann, aber sie sind einfach. Ich habe eine Schaltfläche hinzugefügt, die einen neuen View-Controller verschiebt. –

+0

https://stackoverflow.com/questions/46415168/custom-title-view-not-centered –