2017-10-26 11 views
1

Ich habe eine App mit einem Bereitstellungsziel von iOS 9.3.leftBarButtonItem setTitleTextAttributes Problem in iOS11

Ich habe gerade auf Xcode 9.0.1 aktualisiert und habe dieses Problem auf allen Simulatorgeräten und meinem iPhone7-Gerät mit iOS11 bemerkt. Das Problem betrifft keine Geräte mit < iOS11.

ich ein linker Balken Taste Artikel am Initialisierung mit einer benutzerdefinierten Schriftart wie folgt (in viewDidLoad):

UIBarButtonItem *safeModeButton = [[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStylePlain target:self action:@selector(toggleSafeMode)]; 
[safeModeButton setTitleTextAttributes: 
[NSDictionary dictionaryWithObjectsAndKeys: 
    [UIFont fontWithName:@"Sosa-Regular" size:31],NSFontAttributeName, 
    nil]forState:UIControlStateNormal]; 
[self.navigationItem setLeftBarButtonItem:safeModeButton]; 
self.navigationItem.leftItemsSupplementBackButton = YES; 

Kurz nach in einem anderen Verfahren habe ich die Bar-Taste Titel wie folgt:

self.navigationItem.leftBarButtonItem.title = @"è"; 

Das Problem ist, ich sehe die tatsächliche è Text auf der Schaltfläche, anstatt das Symbol, das gerendert werden soll. è für die Schriftart "Sosa-Regular" ist ein Symbol.

Ich hatte dieses Problem vor dem Xcode9/iOS11-Upgrade zuvor nicht. Ich habe versucht, titleTextAttributes explizit festzulegen, bevor ich den Titel einstelle, aber es zeigt immer nur das è. Es ist so, als wäre titleTextAttributes nicht persistent oder wenn der Titel außerhalb von viewDidLoad gesetzt wird, wird titleTextAttributes für die Schaltfläche zurückgesetzt. Wenn ich den Titeltext in viewDidLoad einstelle, funktioniert alles ok.

Irgendwelche Ideen würden geschätzt.

Antwort

1

Die Antwort gefunden, nachdem wir eine Weile herumgespielt haben. Kurz nachdem ich das UIBarButtonItem initialisiert habe, setze ich es auf enabled = false. Da ich nur die Titeltextattribute für UIControlStateNormal angegeben habe, war dies für UIControlStateDisabled nicht relevant. Seltsam ist das nur mit iOS11. Also das Hinzufügen dieser Zeile das Problem behoben:

[safeModeButton setTitleTextAttributes: 
[NSDictionary dictionaryWithObjectsAndKeys: 
    [UIFont fontWithName:@"Sosa-Regular" size:31],NSFontAttributeName, 
    nil]forState:UIControlStateDisabled]; 
Verwandte Themen