tintColor "weiß" in UIActivityViewController: Mail-Composer unbenutzbar

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

Aufgrund der Corona-Krise: Die Veröffentlichung von Stellenangeboten und -gesuchen ist bis 31.12.2020 kostenfrei. Das beinhaltet auch Angebote und Gesuche von und für Freischaffende und Selbstständige.

  • tintColor "weiß" in UIActivityViewController: Mail-Composer unbenutzbar

    Moin!

    Ich habe wieder einen ... :)

    Seid nicht überrascht, wenn ihr eine App mit farbiger Navigationbar und Weiß als tintColor erstellt: Es gibt an einigen Stellen Stolpersteine wenn barItems plötzlich "verschwunden" sind, z. B. beim UIImagePickerController oder UIActivityViewController. Bei letzterem ist beim Teilen per Mail der "Abbrechen"- und "Senden"-Button nicht mehr zu sehen, weil die NavigationBar weiß bzw. hellgrau wird, die Vordergrundfarbe aber weiß bleibt.

    Abhilfe ist ein Invertieren der tintColor vor Aufruf des UIActivityViewControllers und Zurücksetzen beim Beenden (entweder nach Durchführung einer Aktivität oder beim Abbrechen ohne):

    Quellcode

    1. activityViewController.completionWithItemsHandler = ^(NSString *activityType, BOOL completed, NSArray *returnedItems, NSError *activityError)
    2. {
    3. if (!activityType || completed)
    4. {
    5. // UIView / UIButton tint colors cannot be white as e.g. the mail composer is using a white navbar; to be reset once the activity view is dismissed without an activity or the activity was completed
    6. [[UIView appearanceWhenContainedInInstancesOfClasses:@[UINavigationBar.class]] setTintColor:[UIColor whiteColor]];
    7. [[UIButton appearanceWhenContainedInInstancesOfClasses:@[UINavigationBar.class]] setTintColor:[UIColor whiteColor]];
    8. }
    9. };
    10. [[UIView appearanceWhenContainedInInstancesOfClasses:@[UINavigationBar.class]] setTintColor:[UIColor colorNamed:@"CO_TintColor"]];
    11. [[UIButton appearanceWhenContainedInInstancesOfClasses:@[UINavigationBar.class]] setTintColor:[UIColor colorNamed:@"CO_TintColor"]];
    Alles anzeigen


    Schönen Rest-Sonntag, Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • So, ich habe nun aufgegeben und das Farbschema der App auf "tintColor mit Standard-Hintergrund" geändert. Der Grund:
    • Im "Teilen"-Dialog nutzt das Hinzufügen eines Bildes zu einem Kontakt nicht die barTintColor, wohl aber die tintColor. Somit musste ich den Vordergrund beim Aufruf des UIActivityViewControllers auf ungleich weiß setzen (z. B. die App-Farbe)
    • Beim Drucken wird aber wiederum die barTintColor verwendet und die oben eingefärbte Schrift ist nicht lesbar. Hier müsste die Vordergrundfarbe eben doch z. B. weiß sein.
    Hinzu kommt, dass der UIActivityViewController bei Abbruch mancher Aktivitäten stehen bleibt, bei anderen nicht. Ohne eine Konsistenz setzt der o. g. Block also nicht verlässlich die Farben zurück.

    Mir ist keine Lösung dieses Widerspruchs eingefallen und für weiteres Forschen ist mir meine Lebenszeit zu schade. Als Fazit bleibt für mich, dass eine nicht-standardmäßige Farbgebung für die Navigation-Bar momentan (noch?) eine Anleitung zum Unglücklichsein ist.

    Mattes

    Edit: Diese Aussagen beziehen sich natürlich auf die Verwendung des <UIAppearance>-Protokolls. UI-Elemente einzeln einfärben bleibt unberührt ... vielleicht gehe ich diesen Weg ... ungern.
    Diese Seite bleibt aus technischen Gründen unbedruckt.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von MyMattes ()

  • MyMattes schrieb:


    Diese Aussagen beziehen sich natürlich auf die Verwendung des <UIAppearance>-Protokolls. UI-Elemente einzeln einfärben bleibt unberührt ... vielleicht gehe ich diesen Weg ... ungern.
    Bitte entschuldigt meine Selbstgespräche ... Hier nun der Abschluss dieses Themas: Ich habe eine angepasste UINavigationBar-Klasse, welche die Farben setzt bzw. über <UIAppearance> referenziert werden kann. Diese Klasse wird beim Initialisieren der UINavigationController im Code bzw. Storyboard gesetzt.

    Klappt gut, ist clean und ich hätte mir viel Ärger sparen können.

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.