---
title: Automatic observation tracking
framework: uikit
role: collectionGroup
role_heading: API Collection
path: uikit/automatic-observation-tracking
---

# Automatic observation tracking

Simplify updating views when data changes by making updates in methods that support automatic observation tracking.

## Overview

Overview Use automatic observation tracking to update your views in response to model object changes without manually invalidating views. Mark your model classes with the Observable macro, then read model properties in methods like updateProperties() or layoutSubviews(). UIKit tracks which properties you access and automatically calls these methods again when those properties change. This approach eliminates the need to manually call methods like setNeedsLayout() or setNeedsDisplay() after updating model data, reducing opportunities for bugs and outdated displays. These methods support automatic observation tracking in views, view controllers, presentation controllers, buttons, collection view cells, table view cells, and table view headers and footers. For more information, see Updating views automatically with observation tracking.

## Topics

### Observing data in views

- [updateProperties()](uikit/uiview/updateproperties().md)
- [layoutSubviews()](uikit/uiview/layoutsubviews().md)
- [updateConstraints()](uikit/uiview/updateconstraints().md)
- [draw(_:)](uikit/uiview/draw(_:).md)

### Observing data in view controllers

- [updateProperties()](uikit/uiviewcontroller/updateproperties().md)
- [viewWillLayoutSubviews()](uikit/uiviewcontroller/viewwilllayoutsubviews().md)
- [viewDidLayoutSubviews()](uikit/uiviewcontroller/viewdidlayoutsubviews().md)
- [updateViewConstraints()](uikit/uiviewcontroller/updateviewconstraints().md)
- [updateContentUnavailableConfiguration(using:)](uikit/uiviewcontroller/updatecontentunavailableconfiguration(using:).md)

### Observing data in presentation controllers

- [containerViewWillLayoutSubviews()](uikit/uipresentationcontroller/containerviewwilllayoutsubviews().md)
- [containerViewDidLayoutSubviews()](uikit/uipresentationcontroller/containerviewdidlayoutsubviews().md)

### Observing data in buttons

- [updateConfiguration()](uikit/uibutton/updateconfiguration().md)
- [configurationUpdateHandler](uikit/uibutton/configurationupdatehandler-swift.property.md)

### Observing data in collection view cells

- [updateConfiguration(using:)](uikit/uicollectionviewcell/updateconfiguration(using:).md)
- [configurationUpdateHandler](uikit/uicollectionviewcell/configurationupdatehandler-7rqbu.md)

### Observing data in table view cells

- [updateConfiguration(using:)](uikit/uitableviewcell/updateconfiguration(using:).md)
- [configurationUpdateHandler](uikit/uitableviewcell/configurationupdatehandler-974.md)

### Observing data in table header and footer views

- [updateConfiguration(using:)](uikit/uitableviewheaderfooterview/updateconfiguration(using:).md)
- [configurationUpdateHandler](uikit/uitableviewheaderfooterview/configurationupdatehandler-49slo.md)

### Observing data in collection view layouts

- [UICollectionViewCompositionalLayoutSectionProvider](uikit/uicollectionviewcompositionallayoutsectionprovider.md)
- [init(sectionProvider:)](uikit/uicollectionviewcompositionallayout/init(sectionprovider:).md)
- [init(sectionProvider:configuration:)](uikit/uicollectionviewcompositionallayout/init(sectionprovider:configuration:).md)

## See Also

### Data observation

- [Updating views automatically with observation tracking](uikit/updating-views-automatically-with-observation-tracking.md)
