Dunfey · Hotel WWDC as data, est. 1983
Front desk everything
Years
Topics

2023 App ServicesSystem ServicesSwiftUI & UI Frameworks

WWDC23 · 31 min · App Services / System Services / SwiftUI & UI Frameworks

What’s new in UIKit

Explore enhancements and updates to UIKit and learn how to build better iOS, iPadOS, and Mac Catalyst apps. We’ll show you the latest features and improvements in UIKit and share API refinements, performance improvements, and much more.

Watch at developer.apple.com ↗

Transcript all transcripts

Chapters

  • 1:23 — Key feature: Xcode previews
  • 2:08 — Key feature: View controller lifecycle
  • 5:09 — Key feature: Trait system enhancements
  • 6:26 — Key feature: Animation symbol images
  • 7:49 — Key feature: Empty states
  • 9:51 — Internationalization
  • 13:34 — iPad: Document support
  • 13:55 — iPad: Window dragging
  • 14:47 — iPad: Sidebar and Stage Manager
  • 16:56 — iPad: Apple Pencil
  • 19:33 — iPad: Keyboard scrolling
  • 20:21 — General: Collection views
  • 23:03 — General: Spring animations
  • 24:03 — General: Text interactions
  • 25:12 — General: Status bar
  • 26:19 — General: Drag and drop
  • 27:00 — General: HDR images
  • 27:34 — General: Page control
  • 28:42 — General: Palette menus 🎨
  • 30:08 — tvOS menus

Code shown on screen · 5 snippets

Using Xcode previews with view controllers swift · at 1:31 ↗
class LibraryViewController: UIViewController {
    // ...
}

#Preview("Library") {
    let controller = LibraryViewController()
    controller.displayCuratedContent = true
    return controller
}
Using Xcode previews with views swift · at 1:48 ↗
class SlideshowView: UIView {
    // ...
}

#Preview("Memories") {
    let view = SlideshowView()
    view.title = "Memories"
    view.subtitle = "Highlights from the past year"
    view.images = ...
    return view
}
Setting up UIContentUnavailableConfiguration swift · at 8:19 ↗
var config = UIContentUnavailableConfiguration.empty()

config.image = UIImage(systemName: "star.fill")
config.text = "No Favorites"
config.secondaryText =
    "Your favorite translations will appear here."

viewController.contentUnavailableConfiguration = config
Using UIContentUnavailableConfiguration with SwiftUI swift · at 8:56 ↗
let config = UIHostingConfiguration {
    VStack {
        ProgressView(value: progress)
        Text("Downloading file...")
            .foregroundStyle(.secondary)
    }
}
viewController.contentUnavailableConfiguration = config
Using UIContentUnavailableConfiguration for search results swift · at 9:21 ↗
override func updateContentUnavailableConfiguration(
    using state: UIContentUnavailableConfigurationState
) {
    var config: UIContentUnavailableConfiguration?
    if searchResults.isEmpty {
        config = .search()
    }
    contentUnavailableConfiguration = config
}

// Update search results for query
searchResults = backingStore.results(for: query)
setNeedsUpdateContentUnavailableConfiguration()

Resources