Skip to content

Commit 09eb230

Browse files
fix: update placeholder when appearance style changes
1 parent 463cf9a commit 09eb230

File tree

3 files changed

+26
-3
lines changed

3 files changed

+26
-3
lines changed

Sources/ComponentsKit/Components/Avatar/Helpers/AvatarImageManager.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ final class AvatarImageManager: ObservableObject {
55
@Published var avatarImage: UIImage
66

77
private var model: AvatarVM
8-
private var remoteImagesCache = NSCache<NSString, UIImage>()
8+
private static var remoteImagesCache = NSCache<NSString, UIImage>()
99

1010
init(model: AvatarVM) {
1111
self.model = model
@@ -27,7 +27,7 @@ final class AvatarImageManager: ObservableObject {
2727

2828
switch model.imageSrc {
2929
case .remote(let url):
30-
if let image = self.remoteImagesCache.object(forKey: url.absoluteString as NSString) {
30+
if let image = Self.remoteImagesCache.object(forKey: url.absoluteString as NSString) {
3131
self.avatarImage = image
3232
} else {
3333
self.avatarImage = model.placeholderImage(for: size)
@@ -47,7 +47,7 @@ final class AvatarImageManager: ObservableObject {
4747
let image = UIImage(data: data)
4848
else { return }
4949

50-
self.remoteImagesCache.setObject(image, forKey: url.absoluteString as NSString)
50+
Self.remoteImagesCache.setObject(image, forKey: url.absoluteString as NSString)
5151

5252
if url == self.model.imageURL {
5353
self.avatarImage = image

Sources/ComponentsKit/Components/Avatar/SUAvatar.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ public struct SUAvatar: View {
88
public var model: AvatarVM
99

1010
@StateObject private var imageManager: AvatarImageManager
11+
@Environment(\.colorScheme) private var colorScheme
1112

1213
// MARK: - Initialization
1314

@@ -37,5 +38,8 @@ public struct SUAvatar: View {
3738
.onChange(of: self.model) { newValue in
3839
self.imageManager.update(model: newValue, size: newValue.preferredSize)
3940
}
41+
.onChange(of: self.colorScheme) { _ in
42+
self.imageManager.update(model: self.model, size: self.model.preferredSize)
43+
}
4044
}
4145
}

Sources/ComponentsKit/Components/Avatar/UKAvatar.swift

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,12 @@ open class UKAvatar: UIImageView, UKComponent {
4646
self.cancellable = self.imageManager.$avatarImage
4747
.receive(on: DispatchQueue.main)
4848
.sink { self.image = $0 }
49+
50+
if #available(iOS 17.0, *) {
51+
self.registerForTraitChanges([UITraitUserInterfaceStyle.self]) { (view: Self, _: UITraitCollection) in
52+
view.handleTraitChanges()
53+
}
54+
}
4955
}
5056

5157
// MARK: - Style
@@ -89,4 +95,17 @@ open class UKAvatar: UIImageView, UKComponent {
8995
let side = min(minProvidedSide, minPreferredSide)
9096
return CGSize(width: side, height: side)
9197
}
98+
99+
open override func traitCollectionDidChange(
100+
_ previousTraitCollection: UITraitCollection?
101+
) {
102+
super.traitCollectionDidChange(previousTraitCollection)
103+
self.handleTraitChanges()
104+
}
105+
106+
// MARK: Helpers
107+
108+
@objc private func handleTraitChanges() {
109+
self.imageManager.update(model: self.model, size: self.bounds.size)
110+
}
92111
}

0 commit comments

Comments
 (0)