From c0349a2ca856e50fcae8a94e6df7bbf9c32042dc Mon Sep 17 00:00:00 2001 From: Eser DENIZ Date: Sat, 3 Oct 2026 20:25:46 +0200 Subject: [PATCH] Tint a selected glass chip so its label stays readable With glass, a selected chip painted its on-primary label over an untinted glass plate: light text on light glass. The selected state now tints the glass with the fill colour (iOS 26), or fills the capsule on older versions, so the label keeps its contrast. --- resources/ios/NativeUIChipRenderer.swift | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/resources/ios/NativeUIChipRenderer.swift b/resources/ios/NativeUIChipRenderer.swift index c073b8a..25e95b1 100644 --- a/resources/ios/NativeUIChipRenderer.swift +++ b/resources/ios/NativeUIChipRenderer.swift @@ -77,6 +77,7 @@ struct NativeUIChipRenderer: View { .modifier(ChipBackgroundModifier( fillColor: bg, borderColor: border, + selected: isSelected, glassEnabled: glassEnabled, glassInteractive: glassInteractive, glassClear: glassClear, @@ -117,6 +118,9 @@ struct NativeUIChipRenderer: View { private struct ChipBackgroundModifier: ViewModifier { let fillColor: Color let borderColor: Color + /// A selected glass chip takes its fill as a glass tint: its text is + /// the on-primary colour, which an untinted plate can't carry. + let selected: Bool let glassEnabled: Bool let glassInteractive: Bool let glassClear: Bool @@ -131,14 +135,18 @@ private struct ChipBackgroundModifier: ViewModifier { ) if glassEnabled, #available(iOS 26.0, *) { - if glassClear { - bordered.glassEffect(.clear.interactive(glassInteractive), in: shape) - } else { - bordered.glassEffect(.regular.interactive(glassInteractive), in: shape) - } + let glass: Glass = glassClear ? .clear : .regular + bordered.glassEffect( + (selected ? glass.tint(fillColor) : glass).interactive(glassInteractive), + in: shape + ) } else if glassEnabled { bordered.background( - shape.fill(glassClear ? AnyShapeStyle(.ultraThinMaterial) : AnyShapeStyle(.regularMaterial)) + shape.fill( + selected + ? AnyShapeStyle(fillColor) + : (glassClear ? AnyShapeStyle(.ultraThinMaterial) : AnyShapeStyle(.regularMaterial)) + ) ) } else if hasUserBg { // User bg wins — paint nothing here, NodeStyleModifier already