ich ein Logo in Navigationsleiste Titel Spot auf ausgewählte Ansicht-Controller erstellt am die unten Funktion:Navigationsleiste Titelbild erstellen für ausgewählte Ansicht-Controller erzeugen seltsames Verhalten
class func setUpLogoOnNavBar(sourceVC: UIViewController) {
dispatch_async(dispatch_get_main_queue(), {() -> Void in
let imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 135, height: 90))
imageView.contentMode = .ScaleAspectFit
let image = UIImage(named: "LogoAppHeaderBar.png")
imageView.image = image
sourceVC.navigationItem.titleView = imageView
})
}
Indem diese GCD auf dem Hauptthread mit , wenn das Bild auf der linken Seite der Navigationsleiste erscheint, sieht es sehr schlecht aus. Wenn ich den GCD-Code von der folgenden Funktion entferne, verschwindet das Logo-Jumping. Allerdings bekomme ich This application is modifying the autolayout engine from a background thread, which can lead to engine corruption and weird crashes.
Auch das Logo wird in einigen View-Controllern nicht geladen, weil (ich nehme an) es diese Operation auf dem Hauptthread nicht durchführt. Wie gehe ich damit um, dass dieses Bild auf den Haupt-Thread geladen wird, aber nicht springt, wenn ich segne? Danke im Voraus!
Danke für die Antwort. Ich rufe 'setUpLogoOnNavBar' in' viewDidLoad' auf. Ich habe versucht, es ohne den Code für den Hauptthread zu tun, und ich erhielt die Warnung von dem Compiler, den ich oben erwähnte. Das Bild wird auch auf einigen View-Controllern ohne GCD nicht geladen. – tahoecoop
Wenn Sie dies in viewDidLoad aufrufen, ist Ihre Ansicht bereits angelegt. Setzen Sie das Logo in einen Initialisierer, oder möglicherweise in der Ansicht wird angezeigt – DudeOnRock
Das hat den Trick, vielen Dank für die Hilfe! – tahoecoop