---
title: UITraitChangeObservable
framework: uikit
role: symbol
role_heading: Protocol
path: uikit/uitraitchangeobservable-67e94
---

# UITraitChangeObservable

A type that calls your code in reaction to changes in the trait environment.

## Declaration

```swift
@MainActor protocol UITraitChangeObservable
```

## Mentioned in

Adapting your app when traits change Building a desktop-class iPad app

## Overview

Overview Types that conform to UITraitChangeObservable can execute your code in response to changes in their trait collection. When you register for trait changes, the system observes the specified traits, and calls your code when any of the observed traits change value. Keep your trait registrations focused, and avoid doing work not directly relevant to updated traits. Traits may change more than once before the system updates a view, so avoid expensive work in response to trait changes. For example, use the trait change notification to call setNeedsDisplay(), and update your view in draw(_:). UIKit cleans up registrations at the end of the object lifecycle. Unregister only in the rare situations when you need to dynamically change which traits you observe.

## Topics

### Observing trait changes

- [registerForTraitChanges(_:action:)](uikit/uitraitchangeobservable-67e94/registerfortraitchanges(_:action:).md)
- [registerForTraitChanges(_:handler:)](uikit/uitraitchangeobservable-67e94/registerfortraitchanges(_:handler:).md)
- [registerForTraitChanges(_:target:action:)](uikit/uitraitchangeobservable-67e94/registerfortraitchanges(_:target:action:).md)
- [unregisterForTraitChanges(_:)](uikit/uitraitchangeobservable-67e94/unregisterfortraitchanges(_:).md)
- [UITraitChangeObservable.TraitChangeHandler](uikit/uitraitchangeobservable-67e94/traitchangehandler.md)
- [UITraitChangeRegistration](uikit/uitraitchangeregistration.md)

### Registering traits for observation

- [UITraitAccessibilityContrast](uikit/uitraitaccessibilitycontrast-swift.struct.md)
- [UITraitActiveAppearance](uikit/uitraitactiveappearance-swift.struct.md)
- [UITraitDisplayGamut](uikit/uitraitdisplaygamut-swift.struct.md)
- [UITraitDisplayScale](uikit/uitraitdisplayscale-swift.struct.md)
- [UITraitForceTouchCapability](uikit/uitraitforcetouchcapability-swift.struct.md)
- [UITraitHDRHeadroomUsageLimit](uikit/uitraithdrheadroomusagelimit-swift.struct.md)
- [UITraitHorizontalSizeClass](uikit/uitraithorizontalsizeclass-swift.struct.md)
- [UITraitImageDynamicRange](uikit/uitraitimagedynamicrange-swift.struct.md)
- [UITraitLayoutDirection](uikit/uitraitlayoutdirection-swift.struct.md)
- [UITraitLegibilityWeight](uikit/uitraitlegibilityweight-swift.struct.md)
- [UITraitListEnvironment](uikit/uitraitlistenvironment-swift.struct.md)
- [UITraitPreferredContentSizeCategory](uikit/uitraitpreferredcontentsizecategory-swift.struct.md)
- [UITraitResolvesNaturalAlignmentWithBaseWritingDirection](uikit/uitraitresolvesnaturalalignmentwithbasewritingdirection-swift.struct.md)
- [UITraitSceneCaptureState](uikit/uitraitscenecapturestate-swift.struct.md)
- [UITraitSplitViewControllerLayoutEnvironment](uikit/uitraitsplitviewcontrollerlayoutenvironment-swift.struct.md)
- [UITraitTabAccessoryEnvironment](uikit/uitraittabaccessoryenvironment-swift.struct.md)
- [UITraitToolbarItemPresentationSize](uikit/uitraittoolbaritempresentationsize-swift.struct.md)
- [UITraitTypesettingLanguage](uikit/uitraittypesettinglanguage-swift.struct.md)
- [UITraitUserInterfaceIdiom](uikit/uitraituserinterfaceidiom-swift.struct.md)
- [UITraitUserInterfaceLevel](uikit/uitraituserinterfacelevel-swift.struct.md)
- [UITraitUserInterfaceStyle](uikit/uitraituserinterfacestyle-swift.struct.md)
- [UITraitVerticalSizeClass](uikit/uitraitverticalsizeclass-swift.struct.md)

## Relationships

### Conforming Types

- [UIActionSheet](uikit/uiactionsheet.md)
- [UIActivityIndicatorView](uikit/uiactivityindicatorview.md)
- [UIActivityViewController](uikit/uiactivityviewcontroller.md)
- [UIAlertController](uikit/uialertcontroller.md)
- [UIAlertView](uikit/uialertview.md)
- [UIBackgroundExtensionView](uikit/uibackgroundextensionview.md)
- [UIButton](uikit/uibutton.md)
- [UICalendarView](uikit/uicalendarview.md)
- [UICloudSharingController](uikit/uicloudsharingcontroller.md)
- [UICollectionReusableView](uikit/uicollectionreusableview.md)
- [UICollectionView](uikit/uicollectionview.md)
- [UICollectionViewCell](uikit/uicollectionviewcell.md)
- [UICollectionViewController](uikit/uicollectionviewcontroller.md)
- [UICollectionViewListCell](uikit/uicollectionviewlistcell.md)
- [UIColorPickerViewController](uikit/uicolorpickerviewcontroller.md)
- [UIColorWell](uikit/uicolorwell.md)
- [UIContentUnavailableView](uikit/uicontentunavailableview.md)
- [UIControl](uikit/uicontrol.md)
- [UIDatePicker](uikit/uidatepicker.md)
- [UIDocumentBrowserViewController](uikit/uidocumentbrowserviewcontroller.md)
- [UIDocumentMenuViewController](uikit/uidocumentmenuviewcontroller.md)
- [UIDocumentPickerExtensionViewController](uikit/uidocumentpickerextensionviewcontroller.md)
- [UIDocumentPickerViewController](uikit/uidocumentpickerviewcontroller.md)
- [UIDocumentViewController](uikit/uidocumentviewcontroller.md)
- [UIEventAttributionView](uikit/uieventattributionview.md)
- [UIFontPickerViewController](uikit/uifontpickerviewcontroller.md)
- [UIImagePickerController](uikit/uiimagepickercontroller.md)
- [UIImageView](uikit/uiimageview.md)
- [UIInputView](uikit/uiinputview.md)
- [UIInputViewController](uikit/uiinputviewcontroller.md)
- [UILabel](uikit/uilabel.md)
- [UIListContentView](uikit/uilistcontentview.md)
- [UINavigationBar](uikit/uinavigationbar.md)
- [UINavigationController](uikit/uinavigationcontroller.md)
- [UIPageControl](uikit/uipagecontrol.md)
- [UIPageViewController](uikit/uipageviewcontroller.md)
- [UIPasteControl](uikit/uipastecontrol.md)
- [UIPickerView](uikit/uipickerview.md)
- [UIPopoverBackgroundView](uikit/uipopoverbackgroundview.md)
- [UIPopoverPresentationController](uikit/uipopoverpresentationcontroller.md)
- [UIPresentationController](uikit/uipresentationcontroller.md)
- [UIProgressView](uikit/uiprogressview.md)
- [UIReferenceLibraryViewController](uikit/uireferencelibraryviewcontroller.md)
- [UIRefreshControl](uikit/uirefreshcontrol.md)
- [UIScrollView](uikit/uiscrollview.md)
- [UISearchBar](uikit/uisearchbar.md)
- [UISearchContainerViewController](uikit/uisearchcontainerviewcontroller.md)
- [UISearchController](uikit/uisearchcontroller.md)
- [UISearchTextField](uikit/uisearchtextfield.md)
- [UISegmentedControl](uikit/uisegmentedcontrol.md)
- [UISheetPresentationController](uikit/uisheetpresentationcontroller.md)
- [UISlider](uikit/uislider.md)
- [UISplitViewController](uikit/uisplitviewcontroller.md)
- [UIStackView](uikit/uistackview.md)
- [UIStandardTextCursorView](uikit/uistandardtextcursorview.md)
- [UIStepper](uikit/uistepper.md)
- [UISwitch](uikit/uiswitch.md)
- [UITabBar](uikit/uitabbar.md)
- [UITabBarController](uikit/uitabbarcontroller.md)
- [UITableView](uikit/uitableview.md)
- [UITableViewCell](uikit/uitableviewcell.md)
- [UITableViewController](uikit/uitableviewcontroller.md)
- [UITableViewHeaderFooterView](uikit/uitableviewheaderfooterview.md)
- [UITextField](uikit/uitextfield.md)
- [UITextFormattingViewController](uikit/uitextformattingviewcontroller.md)
- [UITextView](uikit/uitextview.md)
- [UIToolbar](uikit/uitoolbar.md)
- [UIVideoEditorController](uikit/uivideoeditorcontroller.md)
- [UIView](uikit/uiview.md)
- [UIViewController](uikit/uiviewcontroller.md)
- [UIVisualEffectView](uikit/uivisualeffectview.md)
- [UIWebView](uikit/uiwebview.md)
- [UIWindow](uikit/uiwindow.md)
- [UIWindowScene](uikit/uiwindowscene.md)

## See Also

### Observing and managing traits

- [Automatic trait tracking](uikit/automatic-trait-tracking.md)
- [UITraitCollection](uikit/uitraitcollection.md)
- [UITraitEnvironment](uikit/uitraitenvironment.md)
- [UIMutableTraits](uikit/uimutabletraits-13ja5.md)
- [UIAdaptivePresentationControllerDelegate](uikit/uiadaptivepresentationcontrollerdelegate.md)
- [UIContentContainer](uikit/uicontentcontainer.md)
