iOS 27 enforces stricter adaptivity requirements for UIKit apps, making iPhone apps fully resizable in iPhone Mirroring and on iPad, while introducing new navigation bar minimization controls, sidebar opt-in for iPhone tab bars, and prominent tab customization.
⢠UIScene lifecycle is now mandatory ā apps built without it will fail to launch on iOS 27
⢠iPhone apps running via iPhone Mirroring or on iPad are now fully resizable, making adaptive layout a hard requirement rather than a best practice
⢠UINavigationItem gains barMinimizationBehavior and barMinimizationSafeAreaAdjustment to control interactive scroll-away behavior
⢠UITabBarController gains prominentTabIdentifier and sidebar.preferredPlacement = .sidebar for iPhone
⢠iPhone apps are now fully resizable in iPhone Mirroring on Mac and when running on iPad ā apps that rely on UIScreen.main, interface orientation, or user interface idiom for layout will break or look wrong
⢠Navigation bars gain interactive minimization via barMinimizationBehavior, giving developers explicit control over scroll-away behavior previously only managed by the system
⢠iPhone tab bar controllers can now opt into sidebar layout with sidebar.preferredPlacement = .sidebar, unlocking iPad-style navigation on large iPhone contexts
Shows how to opt an iPhone UITabBarController into sidebar mode, set a prominent tab, and configure navigation bar minimization ā all using new iOS 27 APIs.
import UIKit
class ModernTabBarController: UITabBarController {
override func viewDidLoad() {
super.viewDidLoad()
// Build three tabs
let feedVC = makeTab(
title: "Feed",
systemImage: "house.fill",
identifier: "feed"
)
let searchVC = makeTab(
title: "Search",
systemImage: "magnifyingglass",
identifier: "search"
)
let profileVC = makeTab(
title: "Profile",
systemImage: "person.fill",
identifier: "profile"
)
setViewControllers([feedVC, searchVC, profileVC], animated: false)
// iOS 27: Opt iPhone into sidebar layout when space allows
sidebar.preferredPlacement = .sidebar
// iOS 27: Keep "Feed" tab always visible even when tab bar collapses
prominentTabIdentifier = "feed"
// Show or hide sidebar-specific UI based on availability
updateSidebarAvailability()
}
private func makeTab(title: String, systemImage: String, identifier: String) -> UINavigationController {
let content = ContentViewController(title: title)
let nav = UINavigationController(rootViewController: content)
let tabItem = UITabBarItem(
title: title,
image: UIImage(systemName: systemImage),
tag: 0
)
nav.tabBarItem = tabItem
// iOS 27: Configure navigation bar minimization
content.navigationItem.barMinimizationBehavior = .always
content.navigationItem.barMinimizationSafeAreaAdjustment = .automatic
return nav
}
private func updateSidebarAvailability() {
// iOS 27: sidebar.isAvailable tells you if sidebar is currently shown
if sidebar.isAvailable {
print("Sidebar is active ā surface nested tabs in sidebar")
} else {
print("No sidebar ā ensure nested tab content is reachable elsewhere")
}
}
}
class ContentViewController: UIViewController {
init(title: String) {
super.init(nibName: nil, bundle: nil)
self.title = title
}
required init?(coder: NSCoder) { fatalError() }
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .systemBackground
// Use trait collection instead of UIScreen.main.scale (iOS 27 best practice)
let scale = traitCollection.displayScale
print("Display scale from trait collection: \(scale)")
}
override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
super.traitCollectionDidChange(previousTraitCollection)
// Use size class, not interfaceOrientation or userInterfaceIdiom
let isRegular = traitCollection.horizontalSizeClass == .regular
print("Horizontal size class regular: \(isRegular)")
}
}Liquid Glass is Apple's new material and visual design language introduced in iOS 27, bringing translucent, refractive glass-like surfaces to system and custom UI elements. It replaces the frosted vibrancy aesthetic with a more dynamic, depth-aware material that responds to content beneath it.
PaperKit is Apple's full-featured canvas framework ā previously internal-only ā now publicly available in iOS/macOS/visionOS 27. It powers the drawing and markup experience in Notes, Preview, and Freeform, giving developers access to a complete pencil, shapes, images, and text canvas with a rich data model.
Xcode 27 introduces a fully customizable toolbar and theme system, untitled scratch projects, coding agent integration directly in the editor, and the new Device Hub for evaluating apps across simulators and physical devices side-by-side.
In-depth guide
SwiftUI & Liquid Glass in iOS 27 āUIScene lifecycle is now required when building with the latest SDKs ā apps without a UISceneDelegate will not launch. UIScreen.main references return incorrect data in mirrored/external display contexts. Interface orientation and user interface idiom must no longer be used for layout decisions ā use size classes or view bounds instead. The .automatic scroll edge effect style no longer switches between soft/hard styles but provides its own visuals.
Sidebar tab bar only appears when horizontal size class is regular; full resizability applies during iPhone Mirroring on Mac and when running on iPad
iOS 27 introduces new SwiftUI drag and drop APIs including reorderable, reorderContainer, dragContainer, and configuration modifiers that enable reordering within and across collections, multi-item drag, and fine-grained control over how data is transferred during drag and drop operations.