Skip to content

Commit c4aad91

Browse files
graycreateclaude
andcommitted
fix: prevent WebView white flash in dark mode by setting initial background color
- Set WebView background color immediately based on current UI mode - Added determineIsDarkMode() helper function for consistent dark mode detection - Set both WebView and scrollView background colors to match app theme - Background color now updates dynamically when UI mode changes 🤖 Generated with Claude Code (https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
1 parent 4e7f244 commit c4aad91

File tree

1 file changed

+26
-10
lines changed

1 file changed

+26
-10
lines changed

V2er/View/FeedDetail/HtmlView.swift

Lines changed: 26 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,13 @@ fileprivate struct Webview: UIViewRepresentable, WebViewHandlerDelegate {
6666
webView.allowsBackForwardNavigationGestures = false
6767
webView.scrollView.isScrollEnabled = false
6868
webView.configuration.defaultWebpagePreferences.allowsContentJavaScript = true
69+
70+
// Set WebView background based on current UI mode to prevent white flash
71+
let isDark = determineIsDarkMode()
72+
webView.isOpaque = false
73+
webView.backgroundColor = isDark ? UIColor(red: 0.067, green: 0.071, blue: 0.078, alpha: 1.0) : UIColor.white
74+
webView.scrollView.backgroundColor = isDark ? UIColor(red: 0.067, green: 0.071, blue: 0.078, alpha: 1.0) : UIColor.white
75+
6976
return webView
7077
}
7178

@@ -74,16 +81,13 @@ fileprivate struct Webview: UIViewRepresentable, WebViewHandlerDelegate {
7481
// if rendered { return }
7582
var content = Bundle.readString(name: "v2er", type: "html")
7683
// Determine dark mode based on app appearance setting
77-
let isDark: Bool
78-
let appearance = store.appState.settingState.appearance
79-
switch appearance {
80-
case .dark:
81-
isDark = true
82-
case .light:
83-
isDark = false
84-
case .system:
85-
isDark = colorScheme == .dark
86-
}
84+
let isDark = determineIsDarkMode()
85+
86+
// Update WebView background color to match current UI mode
87+
webView.isOpaque = false
88+
webView.backgroundColor = isDark ? UIColor(red: 0.067, green: 0.071, blue: 0.078, alpha: 1.0) : UIColor.white
89+
webView.scrollView.backgroundColor = isDark ? UIColor(red: 0.067, green: 0.071, blue: 0.078, alpha: 1.0) : UIColor.white
90+
8791
let fontSize = 16
8892
let params = "\(isDark), \(fontSize)"
8993
content = content?.replace(segs: "{injecttedContent}", with: html ?? .empty)
@@ -92,6 +96,18 @@ fileprivate struct Webview: UIViewRepresentable, WebViewHandlerDelegate {
9296
webView.loadHTMLString(content ?? .empty, baseURL: baseUrl)
9397
}
9498

99+
private func determineIsDarkMode() -> Bool {
100+
let appearance = store.appState.settingState.appearance
101+
switch appearance {
102+
case .dark:
103+
return true
104+
case .light:
105+
return false
106+
case .system:
107+
return colorScheme == .dark
108+
}
109+
}
110+
95111
func receivedJsonValueFromWebView(value: [String : Any?]) {
96112
print("JSON value received from web is: \(value)")
97113
}

0 commit comments

Comments
 (0)