Всем привет! Если вы обновляете свое приложение под
iOS 26, то обратили внимание на поиск.
Apple серьезно переработала не только визуал, но и логику размещения поисковых интерфейсов.
Рассказываю, как это работает теперь, с живыми примерами и кодом.
Поиск в toolbar:
Раньше поиск в
NavigationSplitView автоматически размещался в сайдбаре на
iPad и вверху экрана на
iPhone. Теперь система сама выбирает оптимальное расположение:
// Раньше: поиск всегда в сайдбаре
NavigationSplitView {
List(notes, selection: $selectedNote) { note in
NavigationLink(note.title, value: note)
}
.navigationTitle("Notes")
} detail: {
NoteDetailView(note: selectedNote)
}
.searchable(text: $searchText) // Новый стиль по умолчанию
В
iOS 26 тот же код дает совершенно другой результат:
- 🔹На iPad: поиск в стеклянном контейнере в правом верхнем углу.
- 🔹На iPhone: поиск внизу экрана (удобно для больших экранов).
Хотите вернуть старое поведение? Укажи явное размещение:
.searchable(text: $searchText, placement: .sidebar)
Поиск в detail view:
Если поиск нужен только в детальном представлении, то модификатор применяется к нему:
NavigationSplitView {
// Список без поиска
} detail: {
NoteDetailView(note: selectedNote)
.searchable(text: $searchText) // Только для детального просмотра
}
Здесь тоже работает новое позиционирование: сверху на
iPad, снизу на
iPhone.
Поиск в tabBar:
Для приложений с
TabBar появился отдельный сценарий. Создаем вкладку с ролью
.search:
TabView {
Tab("Library", systemImage: "books.vertical") {
LibraryView()
}
Tab(role: .search) { // Важно: роль search
NavigationStack { // Обязательно в NavigationStack
SearchView()
.navigationTitle("Search")
}
}
}
.searchable(text: $searchText)
В
iOS 26 такая вкладка:
- Визуально отделена от других.
- Превращается в поисковое поле при выборе.
- На iPad размещается по центру сверху.
Новые toolbar-компоненты:
Самое интересное - кастомизация нижнего
toolbar. Добавлены два новых типа контента:
.toolbar {
if #available(iOS 26.0, *) {
DefaultToolbarItem(kind: .search, placement: .bottomBar) // Новый!
ToolbarSpacer(.flexible, placement: .bottomBar) // И этот новый
}
ToolbarItem(placement: .bottomBar) {
NewNoteButton() // Ваша кастомная кнопка
}
}
Так поиск и другие элементы toolbar правильно распределят пространство.
Минимизация поиска:
Если поиск не основная функция, можно свернуть его в кнопку:
// Создаем extension для удобства
extension View {
@ViewBuilder func minimizedSearch() -> some View {
if #available(iOS 26.0, *) {
self.searchToolbarBehavior(.minimize)
} else {
self
}
}
}
// Использование
.searchable(text: $searchText)
.minimizedSearch() // Теперь это кнопка поиска!
Система может применить это поведение автоматически, в зависимости от размера экрана или количества элементов
toolbar.
Вывод:
Большинство изменений в поиске
iOS 26 работают автоматически, достаточно обновить приложение до новых
API. Новый дизайн обеспечивает единый стиль и улучшенный
UX, особенно для больших экранов, при этом сохраняя гибкость кастомизации.