Increase Contrast reduces List selection contrast in dark appearance in SwiftUI NavigationSplitView

[Submitted as FB22200608]

With Increase Contrast turned on, the selected row highlight in a List behaves inconsistently between light and dark appearance on iPad. In light appearance the blue selection highlight correctly becomes darker, but in dark appearance it becomes lighter instead. The text contrast ratio drops from about 3:1 to about 1.5:1, well below accessibility guidelines.

This reproduces both in the simulator and on a physical device. The sample uses a standard SwiftUI List inside NavigationSplitView with built-in selection styling. No custom colors or styling are applied.

REPRO STEPS

  1. Create a new Multiplatform project.
  2. Replace ContentView with code below.
  3. Build and run on iPad.
  4. Select an item in the list.
  5. Turn on Dark appearance (Cmd-Shift-A in Simulator).
  6. Turn on Increase Contrast (Cmd-Control-Shift-A in Simulator).
  7. Observe the selected row highlight.

ACTUAL

In light appearance, the blue selection highlight becomes darker when Increase Contrast is on, improving contrast as expected.

In dark appearance, the blue selection highlight becomes lighter when Increase Contrast is on, reducing contrast between the selection background and the white text.

EXPECTED

Increase Contrast should consistently increase contrast. In dark appearance, the selection highlight should become darker—or otherwise increase contrast with the foreground text—not lighter.

SAMPLE CODE

struct ContentView: View {
    @State private var selection: String?
    
    var body: some View {
        NavigationSplitView {
            Text("Sidebar")
        } content: {
            List(selection: $selection) {
                Text("Item One")
                    .tag("One")
                Text("Item Two")
                    .tag("Two")
            }
        } detail: {
            if let selection {
                Text(selection)
            } else {
                Text("Select an item")
            }
        }
    }
}

SCREEN RECORDING

CONTACTS

The Contacts app behaves correctly. When Increase Contrast is turned on, the selection blue becomes darker, improving contrast.

PASSWORDS

The Passwords app, however, exhibits the issue. With Increase Contrast turned on, the selection blue becomes lighter instead of darker, reducing contrast.

Thank you for reporting and providing examples,

Are you looking for a workaround?

In the meantime, updates will be provided in Feedback Assistant.

 Travis

Hey @DTS Engineer Travis,

A workaround would be helpful, but ideally this would be fixed in the framework so it benefits all affected apps, not just mine.

I've already had to implement quite a few workarounds with iOS 26. Looking at my open feedbacks and posts here, several remain unresolved. I have workarounds for most, but could clean up my code if they weren't necessary.

For UIKit, isDarkerSystemColorsEnabled indicates whether Increase Contrast is active. To receive updates when this setting changes, observe darkerSystemColorsStatusDidChangeNotification.

For AppKit, the accessibilityDisplayShouldIncreaseContrast property indicates if a high-contrast user interface should be presented. Apps can register accessibilityDisplayOptionsDidChangeNotification to respond to changes in this setting

Lastly, SwiftUI has colorSchemeContrast, an environment value that provides information on whether standard or increased contrast applies to a view. SwiftUI automatically updates this value when the contrast changes, redrawing views that depend on it.

I encourage you to share your workarounds here, as well as file separate bug reports against each app that displays incorrectly. Once complete, post those FB numbers in this thread and I will make sure they get the correct eyes on them.

Thank you.

 Travis

@DTS Engineer , here you go…

  • Passwords: FB22216684
  • Messages: FB22216811
  • Calculator: FB22216904

Thanks for the workaround info.

I think there are two confounding issues here. The first is that the default accentColor is not intended to be used as a background color, and its high contrast versions reduce rather than increase contrast with .primary color text (in both light and dark themes).

NavigationSplitView & Passwords are both using the default accentColor while Contacts and Messages are both probably using a custom color as a background, which have high contrast versions that are intended to be used as a background for .primary color text.

The other issue is much more difficult to work around, which is that certain views aren't actually using the high contrast version of the color, but are further amplifying these colors programmatically, even if you do specify a high contrast color. I think this is based on whether they are contained inside other UIKit-based views, but I am very not sure.

import SwiftUI

@main
struct HighContrastBlueDemoApp: App {
    var body: some Scene {
        WindowGroup { ContentView() }
    }
}

struct ContentView: View {
    var body: some View {
        VStack(spacing: 0) {
            Color.accentColor
                .overlay {
                    Text("Color.accentColor — NOT in NavigationStack")
                        .foregroundStyle(.white)
                }

            NavigationStack {
                Color.accentColor
                    .overlay {
                        Text("Color.accentColor — inside NavigationStack")
                            .foregroundStyle(.white)
                    }
                    .toolbar(.hidden, for: .navigationBar)
            }
        }
        .ignoresSafeArea()
    }
}

#Preview { ContentView() }

This means that even if I specify a high contrast color in an asset file, I can't use it consistently. I assume everyone is working around this with hardcoded sRBG values, or just letting their app get ugly in Increased Contrast mode, but I haven't gotten there yet.

Please let me know if I've done something inane.

Increase Contrast reduces List selection contrast in dark appearance in SwiftUI NavigationSplitView
 
 
Q