На
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 жив и продолжает развиваться.