2016-03-24 10 views
0

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!

Antwort

1

Warum verwenden Sie GCD überhaupt, wenn Sie Ihre Benutzeroberfläche erstellen? Es sieht nicht so aus, als würden Sie das Bild über das Internet erhalten, daher sollte die Darstellung Ihrer Navigationsleiste nicht asynchron erfolgen. Rufen Sie setUpLogoOnNavBar von einem anderen Thread auf? Du solltest nicht.

+0

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

+0

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

+0

Das hat den Trick, vielen Dank für die Hilfe! – tahoecoop