Loading...
Loading...
Write, review, or improve UIKit code following best practices for view controller lifecycle, Auto Layout, collection views, navigation, animation, memory management, and modern iOS 18–26 APIs. Use when building new UIKit features, refactoring existing views or view controllers, reviewing code quality, adopting modern UIKit patterns (diffable data sources, compositional layout, cell configuration), or bridging UIKit with SwiftUI. Does not cover SwiftUI-only code.
npx skill4agent add ivan-magda/uikit-expert-skill uikit-expertviewIsAppearingviewDidLoadreferences/view-controller-lifecycle.mdtranslatesAutoresizingMaskIntoConstraintsreferences/auto-layout.mdreferences/modern-collection-views.mdUIContentConfigurationtextLabelreferences/cell-configuration.mdreferences/list-performance.mdreferences/navigation-patterns.mdreferences/animation-patterns.md[weak self]references/memory-management.mdreferences/concurrency-main-thread.mdreferences/uikit-swiftui-interop.mdreferences/image-loading.mdreferences/keyboard-scroll.mdreferences/adaptive-appearance.mdreferences/modern-uikit-apis.mdviewDidLoadviewIsAppearingreferences/view-controller-lifecycle.mdisActive.constantreferences/auto-layout.mdUITableViewDataSourcereferences/modern-collection-views.mdtextLabeldetailTextLabelimageViewUIContentConfigurationreferences/cell-configuration.mdreloadItemsreconfigureItemsreferences/list-performance.mdnavigationItemnavigationBarreferences/navigation-patterns.mdreferences/animation-patterns.md[weak self]viewDidDisappearreferences/memory-management.mdDispatchQueue.main.asyncTaskreferences/concurrency-main-thread.mdUIImage(data:)references/image-loading.mdUIKeyboardLayoutGuidereferences/keyboard-scroll.mdtraitCollectionDidChangeregisterForTraitChangesreferences/adaptive-appearance.mdreferences/modern-uikit-apis.mdviewDidLoadviewIsAppearingreferences/view-controller-lifecycle.mdreferences/auto-layout.mdreferences/modern-collection-views.mdUIContentConfigurationconfigurationUpdateHandlerreferences/cell-configuration.mdreferences/list-performance.mdreferences/navigation-patterns.mdreferences/animation-patterns.md[weak self]references/memory-management.md@MainActorreferences/concurrency-main-thread.mdreferences/uikit-swiftui-interop.mdreferences/image-loading.mdUIKeyboardLayoutGuidereferences/keyboard-scroll.mdreferences/adaptive-appearance.md#availablereferences/modern-uikit-apis.mdviewDidLoadviewIsAppearingviewDidLayoutSubviewsviewWillAppearsuperaddChildaddSubviewdidMove(toParent:)deinittranslatesAutoresizingMaskIntoConstraints = falseNSLayoutConstraint.activate([]).isActive = trueisActive.constant.requiredlayoutIfNeeded().flushUpdatesUICollectionViewDiffableDataSourcereconfigureItemsreloadItemsapplySnapshotUsingReloadDataUICollectionViewCompositionalLayoutUICollectionView.CellRegistrationUIContentConfigurationUIBackgroundConfigurationconfigurationUpdateHandlerUINavigationBarAppearancenavigationItemviewDidLoadnavigationBarviewWillAppearsetViewControllers(_:animated:)transitionCoordinatorprefersLargeTitleslargeTitleDisplayModeUIView.animatefinishedUIViewPropertyAnimatorCABasicAnimationUIView.animate(springDuration:bounce:)layoutIfNeeded()[weak self][weak self]viewWillDisappear[weak self]deinit[weak self]weak var delegate: SomeDelegate?AnyObjectdeinitUIViewController@MainActorTaskviewDidDisappeardeinitTask.isCancelledawaitTask.detachedMainActor.runDispatchQueue.main.syncawait MainActor.runaddChildaddSubviewdidMovesizingOptions = .intrinsicContentSizeupdateUIViewmakeUIViewbyPreparingThumbnail(of:)prepareForDisplay()prepareForReuseUIKeyboardLayoutGuideview.keyboardLayoutGuide.topAnchorfollowsUndockedKeyboard = trueregisterForTraitChangestraitCollectionDidChangeUIFont.preferredFont(forTextStyle:)adjustsFontForContentSizeCategory = true.label.systemBackgroundaccessibilityLabelaccessibilityTraitsaccessibilityHintUIAccessibilityCustomAction| Method | Use For |
|---|---|
| One-time setup: subviews, constraints, delegates |
| Geometry-dependent work, trait-based layout, scroll-to-item |
| Transition coordinator animations only |
| Lightweight layer frame adjustments (fires multiple times) |
| Start animations, analytics, post-appearance work |
| Cancel tasks, invalidate timers, save state |
| Final cleanup, cancel background work |
| API | Best For | Interactive | Off Main Thread |
|---|---|---|---|
| Simple one-shot changes | No | No |
| Gesture-driven, interruptible | Yes | No |
| Layer properties, 3D transforms | Limited | Yes (Render Server) |
| Deprecated / Legacy | Modern Replacement | Since |
|---|---|---|
| | iOS 17 |
| Keyboard notifications | | iOS 15 |
| | iOS 14 |
| | iOS 14 |
| | iOS 15 |
| | iOS 13 |
| | iOS 13 |
Manual | | iOS 26 |
| Legacy app lifecycle | | Mandatory iOS 26 |
| | iOS 18 |
viewDidLoadviewIsAppearingviewWillAppearsuperdeinittranslatesAutoresizingMaskIntoConstraints = falseNSLayoutConstraint.activate([])isActive.constant.requiredsetNeedsLayout()layoutSubviewsviewDidLayoutSubviewsreconfigureItemsreloadItemsCellRegistrationUIContentConfigurationBUG_IN_CLIENTUINavigationBarAppearancenavigationItemviewDidLoadnavigationBarviewWillAppearprefersLargeTitleslargeTitleDisplayModeUIViewPropertyAnimatorCAAnimationfinished[weak self][weak self]viewWillDisappearviewDidDisappearweak varAnyObjectTask.isCancelledawaitTask.detachedMainActor.run@MainActorUIViewControllerDispatchQueue.main.syncprepareForReuseNSCacheUIHostingControllerUIHostingControlleraddChildaddSubviewdidMoveupdateUIViewUIKeyboardLayoutGuidefollowsUndockedKeyboard = trueregisterForTraitChangestraitCollectionDidChangepreferredFontadjustsFontForContentSizeCategory = trueaccessibilityLabelaccessibilityTraitsUIAccessibilityCustomAction#availableUISceneUIObservationTrackingEnabledreferences/view-controller-lifecycle.mdreferences/auto-layout.mdreferences/modern-collection-views.mdreferences/cell-configuration.mdreferences/list-performance.mdreferences/navigation-patterns.mdreferences/animation-patterns.mdreferences/memory-management.mdreferences/concurrency-main-thread.mdreferences/uikit-swiftui-interop.mdreferences/image-loading.mdreferences/keyboard-scroll.mdreferences/adaptive-appearance.mdreferences/modern-uikit-apis.md