[SWIFT] [IOS] Was tun, wenn das Bild mit einer Farbe gefüllt ist?

Es gibt Zeiten, in denen Sie Ihr Originalbild in die Navigationsleiste einfügen und es etwas reicher machen möchten, oder? Wenn Sie zu diesem Zeitpunkt versuchen, dies auf die übliche Weise zu tun, wird es in durchgehendem Blau angezeigt.

·Ideal

·Wirklichkeit

Ich möchte ein Memorandum darüber aufbewahren, was ich tun kann, um dies zu vermeiden.

Der übliche Weg

Versuchen Sie es zunächst wie gewohnt. Ist es so, wenn es in Code geschrieben ist?

    override func viewDidLoad() {
        super.viewDidLoad()
        
        setupNavigationBar()
    }

    private func setupNavigationBar() {
        navigationItem.title = "Hauptseite"
        
        let button = UIButton(type: .system)
        button.setImage(UIImage(named: "button_refresh"), for: .normal)
        button.addTarget(self, action: #selector(buttonAction), for: .touchUpInside)
        
        let rightItem = UIBarButtonItem(customView: button)
        navigationItem.rightBarButtonItem = rightItem
    }
    
    @objc private func buttonAction() {
        print("Die Farbe des Knopfes ist seltsam! !! !!")
    }

Eigentlich ist es schneller, es in Storyboard hinzuzufügen, aber da dies eine Gruppe ist, die in Code schreibt, mache ich das normalerweise (Iron's Wille).

Wenn Sie es vorerst so schreiben, wird das Schaltflächensymbol mit Blau gefüllt und Sie werden traurig sein.

Abhilfe 1 (beim Schreiben von Code)

Beim Schreiben von Code ist es in Ordnung, nur die Stelle neu zu schreiben, an der setImage auf die Schaltfläche gesetzt ist. Insbesondere sieht es so aus.

button.setImage(UIImage(named: "button_refresh")?.withRenderingMode(.alwaysOriginal), for: .normal)

UIImage hat Rendering-Modus,

automatic Standard. Der Modus wird ausgewählt, wenn Sie das Bild verwenden
alwaysOriginal Zeigen Sie immer das Originalbild an
alwaysTemplate Dies hängt von der Tönungsfarbe der Schaltfläche usw. ab.

Sie können drei angeben. Dieses Mal habe ich "alwaysOriginal" angegeben, da ich das Originalbild in der Navigationsleiste anzeigen möchte. Im Gegenteil, wenn Sie mit tintColor übereinstimmen möchten, können Sie "alwaysTemplate" angeben.

Problemumgehung 2 (bei Angabe direkt in Assets.xcassets)

Für diejenigen unter Ihnen, die das Schreiben in Code als umständlich empfinden, gibt es jedoch eine direkte Möglichkeit, dies in Assets.xcassets zu tun. Öffnen Sie zuerst Assets.xcassets, wählen Sie das gewünschte Bild aus und dann

Schauen Sie sich das zweite "Renser As" oben rechts in den Image Set-Elementen an. Wenn nichts angegeben ist, sollte es "Standard" sein.

Den Rest kennst du schon. Wenn Sie den Wert von "Renser As" in "Original Image" ändern, wird dieser automatisch zu "Always Original", ohne "with Rendering Mode" in Ihrem Code zu verwenden.

Zusammenfassung

Deshalb war es die Einstellungsmethode für den Rendering-Modus von UIImage. Auch wenn es sich um eine Funktion handelt, die Sie unerwartet verwenden, können Sie sich möglicherweise nicht versehentlich daran erinnern (4 Verluste). Seien Sie also vorsichtig.

Recommended Posts

[IOS] Was tun, wenn das Bild mit einer Farbe gefüllt ist?
[Schienen] Was tun, wenn die Ansicht zusammenbricht, wenn eine Nachricht mit der Fehlermethode angezeigt wird?
Was tun, wenn das Hintergrundbild nach der Bereitstellung nicht angewendet wird?
Hinweise zur Vorgehensweise bei der Einrichtung von EC2 mit t2.micro
Was tun, wenn die App nicht mit der neuesten Rails-Version erstellt wurde, die bei neuen Rails installiert wurde?
Was zu tun ist, wenn es ungültig ist, weil es nicht mit einem '-' beginnt
Was tun, wenn das SSL-Zertifikat abgelaufen ist?
ParseException: Was tun, wenn ein nicht analysierbares Datum erreicht ist?
[Schienen] Was tun, wenn das Refile-Bild beim Schreiben der Verarbeitung zum Zeitpunkt des Routing-Fehlers nicht angezeigt wird?
Was ist nach der Installation von 'devise' 'bootstrap' von gemfile with Rails zu tun, wenn url ein Fehler ist?
Was ist zu tun, wenn in Eclipse "Fehler beim Laden der gemeinsam genutzten JNI-Bibliothek" angezeigt wird?
[Witz] Was tun, wenn bei Verwendung von Mixxx unter Ubuntu 20.04 die ungültige Abtastrate erreicht ist?
Was tun, wenn eine javax.batch.operations.JobStartException auftritt?
[Ubuntu 20.04] Was tun, wenn der externe Monitor nicht erkannt wird?
Auf Anforderung wird der Zugriff auf die Ressource beim Push mit Docker verweigert
Was tun, wenn die Validierung mit der Aktualisierungsaktion nicht funktioniert?
Was tun, wenn die Änderungen im Servlet nicht berücksichtigt werden?
Was tun, wenn Cloud 9 im Rails-Lernprogramm voll ist?
Hinweise, was zu tun ist, wenn das Eclipse Maven-Abhängigkeitsglas nicht korrekt ist
Was tun, wenn Gradle sagt: "Für weitere Informationen kompilieren Sie bitte mit der Option -Xlint: nicht aktiviert."
Was tun, wenn Sie die Quellposition wissen möchten, an der die Methode in bind.pry definiert ist?
Was tun, wenn Maven sagt: "Für weitere Informationen kompilieren Sie bitte mit der Option -Xlint: nicht aktiviert."
Was tun, wenn javax.el.ELException: Kein gültiger Methodenausdruck: wird angezeigt, wenn der JSF-Bildschirm angezeigt wird
Was tun, wenn eine javax.el.PropertyNotWritableException auftritt?
undefinierte Methode Was tun, wenn Sie "user_signed_in" erhalten?
Was tun, wenn das Präfix c in JSP nicht gebunden ist?
Was tun, wenn CentOS nicht mit VirtualBox unter Catalina gestartet werden kann?
Was tun, wenn nach der Installation von npm "npm ERR! Code ENOSELF" angezeigt wird?
Was tun, wenn der Tomcat-Prozess bestehen bleibt, wenn Sie Tomcat in Eclipse stoppen?
Was tun, wenn Sie eine Anwendung mit dem Namen erhalten? AppName ist bereits registriert. Wenn Sie versuchen, GlassFish zu starten
Was tun, wenn Sie mit Reißverschluss sterben, wenn Sie Pom haben, wenn Sie ein ausführbares Glas mit Gradle erstellen?
Was tun, wenn der Vorgang nicht zulässig ist, wenn ein Befehl im Terminal ausgeführt wird?
Was tun, wenn der Wert im zweiten getSubmittedValue () in JSF Validator null wird?
Was tun, wenn der Server-Tomcat stirbt?
Was tun, wenn die Meldung "Ein Server läuft bereits" angezeigt wird. Fehler beim Versuch, den Rails-Server zu starten
[Grails] Beim Ausführen ist ein Fehler aufgetreten. Was ist zu tun, wenn die Grails-CLI nicht gestartet wird?
Androd: Was tun gegen "The Realm befindet sich bereits in einer Schreibtransaktion in"
Was tun beim Debuggen von "Quelle nicht gefunden"?
Was verwenden Sie beim Konvertieren in String?
Was tun, wenn in PlayFramework eine IllegalStateException auftritt?
WELD-001408: Was tun, wenn nicht erfüllte Abhängigkeiten für den Typ Bean mit den Qualifikationsmerkmalen @Default vorliegen?
Was tun, wenn beim Hochladen mit App Store Connect zu viele Symboldateien an die Wand stoßen?
Was ist zu tun, wenn in einer der Quellen in der Entwicklungsumgebung mit Docker × Rails × RSpec "Nicht gefunden" angezeigt wird?
[React.useRef] Was tun, wenn im Ereignis-Listener nicht auf den neuesten Status verwiesen werden kann?
Was tun, wenn rbenv sagt, dass es keine Readline- oder Lib-Historie gibt?
Was tun, wenn die Erstellung durch rbenv install / pyenv install mit anyenv (Debian-System) fehlschlägt?
Vorläufiges Memo beim Erstellen der CentOS 6-Serie mit VirtualBox
Was tun, wenn die bereits verwendete Adresse nach dem Ausführen der Schienen angezeigt wird?
Was tun, wenn die Routing-Einstellungen nach dem Erstellen einer Docker-Umgebung mit Laravel nicht funktionieren?
Was tun, wenn die Annotation JSON Hint nicht mit Lombok und JSONIC funktioniert?
Was tun, wenn der Haltepunkt schattiert ist und beim Debuggen nicht stoppt?
[DDD] Was ist die am besten zugängliche Architektur, um mit domänengesteuertem Design zu beginnen?
Eine Warnung wird angezeigt, wenn versucht wird, eine große Ganzzahl mit den speziellen Variablen $ 1, $ 2, $ 3 ... zu verwenden.