Ist es möglich, a UIImage
's renderingMode
über ein Storyboard oder einen xib-Editor zu ändern ?
Ziel ist es, tintColor
auf das jeweilige UIImageView
Objekt anzuwenden .
ios
ios7
xcode-storyboard
Artem Stepanenko
quelle
quelle
Sie können den Bildwiedergabemodus nicht in der
.xib
Datei, sondern in einer.xcassets
Bibliothek einstellen .Wählen Sie nach dem Hinzufügen eines Bildes zu einer Asset-Bibliothek das Bild aus und öffnen Sie den Attributinspektor auf der rechten Seite von Xcode. Suchen Sie das Attribut 'Rendern als' und setzen Sie es auf 'Vorlage'.
Nachdem Sie den Rendering-Modus eines Bildes festgelegt haben, können Sie der Datei
UIImageView
in a.xib
oder eine Farbtonfarbe hinzufügen.storyboard
, um die Bildfarbe anzupassen.Dadurch wird die Eigenschaft für das Image überall dort festgelegt, wo sie verwendet wird, und nicht nur in einer Interface Builder-Datei. In fast allen Fällen (auf die ich gestoßen bin) ist dies jedoch das gewünschte Verhalten.
Ein paar Dinge zu beachten:
UIImageView
. Ich habe das nicht tief untersucht.UIKitComponents
wie Bildern inUIButton
's undUIBarButtonItem
' s.quelle
UIImageView
, sodass die Farbtonfarbe beim Ausführen der App nicht immer angezeigt wird.Die Verwendung des Vorlagen-Rendering-Modus mit einem UIImageView in einem Storyboard oder xib ist sowohl unter iOS 7 als auch unter iOS 8 sehr fehlerhaft.
Unter iOS 7
Das UIImage wird vom Storyboard / xib nicht richtig dekodiert. Wenn Sie die
imageView.image.renderingMode
Eigenschaft in derviewDidLoad
Methode überprüfen , werden Sie feststellen, dass dies immer der Fall istUIImageRenderingModeAutomatic
, auch wenn Sie sie in Ihrer xcassets-Datei auf Als Vorlagenbild rendern festlegen.Um dies zu umgehen, müssen Sie den Rendering-Modus manuell einstellen:
Unter iOS 8
Das UIImage wird ordnungsgemäß dekodiert und seine
renderingMode
Eigenschaft spiegelt wider, was in der xcassets-Datei ausgewählt wurde, aber das Bild ist nicht getönt.Um dies zu umgehen, haben Sie zwei Möglichkeiten:
tintColor
Eigenschaft im benutzerdefinierten Laufzeitattribut anstelle des Inspektorbereichs "Attribute" fest.oder
Sie können Ihre bevorzugte Option auswählen, wobei beide das Bild richtig tönen.
(Wenn Sie mit Xcode 6.2 kompilieren,
self.imageView.tintColor = self.imageView.tintColor;
reicht es aus, dies nur zu tun , aber dies funktioniert nicht mehr, wenn Sie mit Xcode 6.3 kompilieren.)Fazit
Wenn Sie sowohl iOS 7 als auch iOS 8 unterstützen müssen, benötigen Sie beide Problemumgehungen. Wenn Sie nur iOS 8 unterstützen müssen, ist nur eine Problemumgehung erforderlich.
quelle
Wenn Sie imageView RenderingMode so einstellen, dass die Farbtonfarbe im Storyboard verwendet wird, kann dies auf einen Einzeiler reduziert werden:
Dann können das Bild und die Farbtonfarbe im Storyboard festgelegt werden.
quelle
Sie können .xib-Probleme mit einer Erweiterung beheben:
Quelle: https://gist.github.com/buechner/3b97000a6570a2bfbc99c005cb010bac
Erstaunlich, dieser Fehler gibt es schon seit 4-5 Jahren.
quelle
Sie können
renderingMode
weder vonstoryboard
noch einstellenxib
. Es könnte programmgesteuert darauf zugreifen.Ex:
quelle
UIImage *selectedImage = [unSeletedImage imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
Stellen Sie tintColor & Class im Storyboard ein.
quelle
Es ist sehr einfach zu beheben
Erstellen Sie einfach die Klasse UIImageViewPDF und verwenden Sie sie in Ihrem Storyboard
quelle
Eine andere Lösung besteht darin, eine
UIImageView
Unterklasse zu erstellen :Setzen Sie dann einfach die Klasse im Interface Builder auf
TemplateImageView
.quelle
Einfache Einstellung über Storyboard:
Funktioniert gut unter iOS 10 und Swift 3
quelle
In iOS 9 ist das Festlegen der
tintColor
Eigenschaft in Interface Builder immer noch fehlerhaft.Beachten Sie, dass eine funktionierende Lösung neben dem Schreiben von Zeilen, die
ImageView
Eigenschaften direkt ändern, darin besteht, Render As: Template Image im Asset-Katalog festzulegen und z.quelle
Ich habe dieses Problem durch Hinzufügen eines Laufzeitattributs
tintColor
im Interface Builder behoben .HINWEIS: Sie müssen Ihr Bild weiterhin so einstellen, dass es als Vorlagenbild in Ihrer Datei Images.xcassets gerendert wird.
quelle
Wenn Sie ein IBOutlet erstellen, können Sie es in Ihrer awakeFromNib-Methode wie folgt ändern ...
Während @ Mobys Antwort korrekter ist, könnte dies prägnanter sein.
quelle
Verrückt, dieser Fehler ist immer noch in iOS 12.1! Für Storyboards / Xibs: Das Hinzufügen eines Tags zur UIImageView kann eine schnelle Lösung sein.
Swift 4.2
quelle
Wählen Sie im Storyboard UIImageView und dann Inspector aus und setzen Sie property
renderModeTemplate
=On
In Storyboardquelle