{"id":52313,"date":"2026-06-18T14:56:01","date_gmt":"2026-06-18T18:56:01","guid":{"rendered":"https:\/\/mjtsai.com\/blog\/?p=52313"},"modified":"2026-06-18T14:58:19","modified_gmt":"2026-06-18T18:58:19","slug":"uikit-in-ios-27","status":"publish","type":"post","link":"https:\/\/mjtsai.com\/blog\/2026\/06\/18\/uikit-in-ios-27\/","title":{"rendered":"UIKit in iOS 27"},"content":{"rendered":"<p><a href=\"https:\/\/developer.apple.com\/documentation\/ios-ipados-release-notes\/ios-ipados-27-release-notes\">iOS &amp; iPadOS 27 Beta Release Notes<\/a>:<\/p>\n<blockquote cite=\"https:\/\/developer.apple.com\/documentation\/ios-ipados-release-notes\/ios-ipados-27-release-notes\">\n<p>[You] can use <code>UIScene.extendStateRestoration<\/code> and <code>UIScene.completeStateRestoration<\/code> to extend state restoration for <code>UIScene.ActivationState.background<\/code> to <code>UIScene.ActivationState.foreground<\/code> lifecycle transitions.<\/p>\n<p>[&#8230;]<\/p>\n<p>iOS and iPadOS apps built with the 27.0 SDK or later are required to include a launch screen.<\/p>\n<p>[&#8230;]<\/p>\n<p>Siri can load resources from drag interactions installed in your app&rsquo;s interface.<\/p>\n<p>[&#8230;]<\/p>\n<p>In apps built with the iOS 27.0 SDK, a presented view controller inherits its trait collection by walking up its view&rsquo;s superview chain through the intermediate views of the presentation, rather than jumping directly to the presentation controller.<\/p>\n<\/blockquote>\n\n<p><a href=\"https:\/\/developer.apple.com\/documentation\/updates\/uikit\">UIKit updates<\/a>:<\/p>\n<blockquote cite=\"https:\/\/developer.apple.com\/documentation\/updates\/uikit\">\n<p>Use <a href=\"https:\/\/developer.apple.com\/documentation\/UIKit\/UICollectionViewCompositionalLayoutSectionProvider\"><code>UICollectionViewCompositionalLayoutSectionProvider<\/code><\/a> closures as part of automatic observation tracking to automatically invalidate and update compositional layouts when observable objects change.<\/p>\n<p>[&#8230;]<\/p>\n<p>Use <a href=\"https:\/\/developer.apple.com\/documentation\/UIKit\/UIRefreshControl\"><code>UIRefreshControl<\/code><\/a> and <a href=\"https:\/\/developer.apple.com\/documentation\/UIKit\/UIStepper\"><code>UIStepper<\/code><\/a> in Mac apps built with Mac Catalyst. These controls are now fully supported in the Mac idiom.<\/p>\n<p>[&#8230;]<\/p>\n<p>Starting in iOS 27, apps built with the latest SDK must use the scene-based life cycle or they fail to launch.<\/p>\n<p>[&#8230;]<\/p>\n<p>Use <a href=\"https:\/\/developer.apple.com\/documentation\/UIKit\/NSTextTable\"><code>NSTextTable<\/code><\/a>, <a href=\"https:\/\/developer.apple.com\/documentation\/UIKit\/NSTextBlock\"><code>NSTextBlock<\/code><\/a>, and <a href=\"https:\/\/developer.apple.com\/documentation\/UIKit\/NSTextTableBlock\"><code>NSTextTableBlock<\/code><\/a> to represent table structures in attributed strings.<\/p>\n<\/blockquote>\n\n<p><a href=\"https:\/\/developer.apple.com\/videos\/play\/wwdc2026\/278\/\">Modernize your UIKit app<\/a>:<\/p>\n<blockquote cite=\"https:\/\/developer.apple.com\/videos\/play\/wwdc2026\/278\/\">\n<p>Discover the latest updates to UIKit. Learn how to update your iPhone app layouts to work great when resized with iPhone Mirroring and on iPad. Explore new APIs for tab and navigation bars, find out how to prepare your app for new Apple Intelligence capabilities, and get introduced to a skill for your coding agent of choice that helps modernize your codebase.<\/p>\n<\/blockquote>\n\n<p><a href=\"https:\/\/ikyle.me\/blog\/2026\/whats-new-in-uikit-ios-27\">Kyle Howells<\/a>:<\/p>\n<blockquote cite=\"https:\/\/ikyle.me\/blog\/2026\/whats-new-in-uikit-ios-27\">\n<p>iOS 27's UIKit is a tiny release in terms of API changes, but does have some changes. There are no new top-level paradigms, but there&rsquo;s an new addition to <strong>TextKit 2<\/strong>, a new <strong>scene accessory<\/strong> API, Liquid-Glass-era <strong>bar minimization<\/strong> controls, and a small amount of quality-of-life additions to menus, tab bars, and drag interactions.<\/p>\n<\/blockquote>\n\n<p><a href=\"https:\/\/www.macrumors.com\/2026\/06\/08\/ios-27-hints-at-foldable-iphone-with-app-resizability-push\/\">Hartley Charlton<\/a>:<\/p>\n<blockquote cite=\"https:\/\/www.macrumors.com\/2026\/06\/08\/ios-27-hints-at-foldable-iphone-with-app-resizability-push\/\">\n<p>Apple appears to be laying the groundwork for a foldable iPhone in iOS 27, with new references discovered in the operating system&rsquo;s frameworks and a notable emphasis on flexible app layouts at this year&rsquo;s Platforms State of the Union.<\/p>\n<\/blockquote>\n\n<p><a href=\"https:\/\/www.swiftjectivec.com\/ios-27-notable-uikit-additions\/\">Jordan Morgan<\/a>:<\/p>\n<blockquote cite=\"https:\/\/www.swiftjectivec.com\/ios-27-notable-uikit-additions\/\">\n<p>The nav bar and its friends got quite a bit of attention, and to be honest that&rsquo;s where we will find most of the changes. They adapt to all sorts of sizes and situations&#8230;hmmm, <a href=\"https:\/\/x.com\/samhenrigold\/status\/2064069948486320528\/photo\/1\">I WONDER WHY<\/a>!?<\/p>\n<p>[&#8230;]<\/p>\n<p>A few years ago, I wondered if UIKit would be deprecated altogether. That would&rsquo;ve been drastic, sure, but I <em>did<\/em> wonder. These days, I don&rsquo;t share the same concern anymore. SwiftUI gets better each year, and yeah &mdash; it&rsquo;ll have top billing. But UIKit is solid, and it appears to be a core part of Apple&rsquo;s strategy into the future.<\/p>\n<p>Not much changed this year, and not much was added that&rsquo;s flashy. But, that&rsquo;s true of iOS 27 in several ways.<\/p>\n<\/blockquote>\n\n<p>Previously:<\/p>\n<ul>\n<li><a href=\"https:\/\/mjtsai.com\/blog\/2025\/08\/13\/uikit-in-ios-26\/\">UIKit in iOS 26<\/a><\/li>\n<li><a href=\"https:\/\/mjtsai.com\/blog\/2026\/06\/17\/wwdc-2026-links\/\">WWDC 2026 Links<\/a><\/li>\n<\/ul>","protected":false},"excerpt":{"rendered":"<p>iOS &amp; iPadOS 27 Beta Release Notes: [You] can use UIScene.extendStateRestoration and UIScene.completeStateRestoration to extend state restoration for UIScene.ActivationState.background to UIScene.ActivationState.foreground lifecycle transitions. [&#8230;] iOS and iPadOS apps built with the 27.0 SDK or later are required to include a launch screen. [&#8230;] Siri can load resources from drag interactions installed in your app&rsquo;s interface. [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"apple_news_api_created_at":"2026-06-18T18:56:05Z","apple_news_api_id":"5fdfdae4-321f-41f4-8cec-906cd43f817c","apple_news_api_modified_at":"2026-06-18T18:58:23Z","apple_news_api_revision":"AAAAAAAAAAAAAAAAAAAAAA==","apple_news_api_share_url":"https:\/\/apple.news\/AX9_a5DIfQfSM7JBs1D-BfA","apple_news_coverimage":0,"apple_news_coverimage_caption":"","apple_news_is_hidden":false,"apple_news_is_paid":false,"apple_news_is_preview":false,"apple_news_is_sponsored":false,"apple_news_maturity_rating":"","apple_news_metadata":"\"\"","apple_news_pullquote":"","apple_news_pullquote_position":"","apple_news_slug":"","apple_news_sections":"\"\"","apple_news_suppress_video_url":false,"apple_news_use_image_component":false,"footnotes":""},"categories":[4],"tags":[1621,69,31,2887,71],"class_list":["post-52313","post","type-post","status-publish","format-standard","hentry","category-programming-category","tag-marzipan","tag-cocoa","tag-ios","tag-ios-27","tag-programming"],"apple_news_notices":[],"_links":{"self":[{"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/posts\/52313","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/comments?post=52313"}],"version-history":[{"count":2,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/posts\/52313\/revisions"}],"predecessor-version":[{"id":52320,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/posts\/52313\/revisions\/52320"}],"wp:attachment":[{"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/media?parent=52313"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/categories?post=52313"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/tags?post=52313"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}