iosswiftios13uitraitcollectionios-darkmode

How do i resolve default iOS elements to a particular trait?


How do i resolve a default iOS system element, like say UISegmentedControl, to a particular interface style?

I know colors can be resolved like this.

color.resolvedColor(with: UITraitCollection(userInterfaceStyle: .dark))

How do i do the same for default iOS elements?


Solution


You can override the system interface style by using UIView property overrideUserInterfaceStyle. Use this property to force the view to always adopt a light or dark interface style.

if #available(iOS 13.0, *) {
    segmentedControl.overrideUserInterfaceStyle = .dark
}

For more details see docs here.

Relevant WWDC video - Implementing Dark Mode on iOS. (27:00)