Добавить объявление

Новые возможности UIKit в iOS 27

На WWDC26 компания Apple показала обновления и для UIKit. Не радикальные, не революционные, но заметные. И главное - они подтверждают: UIKit никуда не уходит. SwiftUI будет на первых ролях, это очевидно. Но UIKit остается надежным фундаментом и Apple продолжает его развивать.

В этом году изменений не так много и почти ничего из добавленного не выглядит эффектно. Но в каком-то смысле это справедливо и для iOS 27 в целом. Основной фокус - Siri и ИИ. А UIKit получил точечные улучшения, которые делают его более гибким и адаптивным.

Навигация и кнопки:


Большая часть изменений коснулась навигационной панели и ее элементов. И здесь явно прослеживается одна тенденция: адаптация под разные размеры экранов и форм-факторы. Интересно, с чем бы это могло быть связано?

Каждый контроллер теперь может влиять на то, будет ли его навигационная панель уменьшаться при прокрутке. Это полезно для экранов с большим количеством контента.

Пример использования:

navigationItem.barMinimizeBehavior = .onScrollDown
navigationItem.barMinimizationSafeAreaAdjustment = .enabled

Также появилась возможность ранжировать кнопки в панели. UIKit теперь знает, какие действия важнее сохранять на экране, когда места становится мало. Адаптивные интерфейсы - iPad, Stage Manager, изменяемые окна - везде, где ширина панели постоянно меняется, это становится критичным.

Пример использования:

saveItem.visibilityPriority = .high
shareItem.visibilityPriority = .standard

Еще одно небольшое, но полезное изменение - возможность убрать стандартный отступ у кнопки на панели инструментов:

colorItem.isPaddingRemoved = true

Сцены, окна и ориентация:


Apple продолжает двигаться в сторону многооконных приложений с изменяемыми размерами. И здесь тоже есть подсказки: все это особенно актуально для грядущих складных устройств.

Теперь можно запросить системное подтверждение перед закрытием сцены. Это полезно для приложений работы с документами, редакторов текста и инструментов для работы, где закрытие окна может стереть несохраненные данные.

Пример использования:

windowScene.closureConfirmation = UISceneClosureConfirmation(
title: “Несохраненные данные",
message: "Закрыть несохраненные данные?",
actions: [...]
)

Из интересного, еще появилась возможность регистрировать неинтерактивную сцену для внешнего дисплея. Вспомогательные экраны для презентаций, панели мониторинга, справочные представления - все это теперь проще интегрировать.

И самое важное - каждая сцена теперь может объявлять собственный набор поддерживаемых ориентаций. Видео-сцена может оставаться горизонтальной, а сцена для просмотра или редактирования поворачиваться как угодно.

Пример использования:

func supportedInterfaceOrientations(
for windowScene: UIWindowScene
) -> UIInterfaceOrientationMask {
.landscape
}

Таббары и сайдбары:


Таббары и сайдбары получили несколько настроек для управления тем, что показывать и чему отдавать главный акцент.

Теперь можно визуально выделить одну вкладку, которая важнее остальных. Подходит для ключевых действий вроде написания сообщения, поиска, корзины или создания нового элемента.

Пример использования:

tabBarController.prominentTabIdentifier = "compose"

Также появилась возможность указать предпочтительное размещение: сайдбар или таббар. Приложения, ориентированные на сайдбар, теперь могут аккуратно сворачиваться в таббар на компактных устройствах или в сценариях со складными экранами.

Пример использования:

tabBarController.mode = .tabSidebar
tabBarController.sidebar.preferredPlacement = .sidebar

И наконец - пакетное обновление панели вкладок. Если вы меняете несколько параметров одновременно (значки, изображения, порядок), UIKit объединяет все изменения в один этап, чтобы избежать мерцания.

Пример использования:

tabBarController.performBatchUpdates {
tabBarController.tabs[0].badgeValue = "3"
tabBarController.tabs[1].image = UIImage(systemName: "star.fill")
}

Другие изменения:


В меню теперь можно явно управлять видимостью изображений: показывать, скрывать или оставить системе. Это полезно, когда иконка сама несет информацию, или когда она только добавляет визуальный шум.

Пример использования:

let red = UIAction(
title: "Red",
image: UIImage(systemName: "circle.fill"),
preferredImageVisibility: .visible
) { _ in applyColor(.systemRed) }

И появилась возможность добавлять подзаголовки на экране запуска документа. Мелочь, но приятная.

Вывод:


Еще несколько лет назад можно было задаваться вопросом, не собирается ли Apple отказаться от поддержки UIKit. Сейчас это выглядит маловероятным. SwiftUI становится лучше каждый год и будет на первом место, но UIKit остается надежным фреймворком и продолжает быть важной частью экосистемы.

В этом году обновлений немного и они не бросаются в глаза. Но они есть. И они показывают, что UIKit адаптируется под новые сценарии: складные устройства, многооконные приложения, динамические интерфейсы. UIKit жив и продолжает развиваться.
01.07.2026 18 590