- Xcode 26.0 beta 3, Swift 6, минимальная цель развертывания 18.0
- Эмулятор iPhone 16 под управлением iOS 26.0
Проблему можно продемонстрировать с помощью следующего кода, который использует GeometryReader для измерения размера экрана и вставок безопасной области:
Код: Выделить всё
struct ContentView: View {
var body: some View {
GeometryReader { geo in
VStack {
Text("\(geo.safeAreaInsets.top)")
Spacer()
HStack {
Text("\(geo.safeAreaInsets.leading)")
Spacer()
Text("\(String(describing: geo.size))")
Spacer()
Text("\(geo.safeAreaInsets.trailing)")
}
Spacer()
Text("\(geo.safeAreaInsets.bottom)")
}
.padding(.horizontal)
}
.border(.red)
}
}
- Запустите код на симуляторе iPhone 16, начиная с портретной ориентации.
- Поверните устройство в альбомную ориентацию. Обратите внимание на верхнюю вставку.
- Перезапустите код, уже имея устройство в альбомной ориентации. Сравните верхнюю врезку со врезкой из шага 2.
- Измените ориентацию на книжную, а затем обратно на альбомную. Еще раз сравните верхнюю вставку.
Я также пробовал тесты на iPad (A16). Хотя вставки различаются для разных версий iOS, они одинаковы в книжной и альбомной ориентации. Так что нет проблем.
Я предполагаю (и надеюсь), что проблема с несогласованной вставкой на iPhone — это ошибка, поскольку она без необходимости тратит 5 % высоты экрана. Однако, если ошибка не будет устранена быстро, мне было бы интересно найти обходной путь.
- Одним из обходных путей было бы игнорировать вставку верхней безопасной области при работе на iPhone в альбомной ориентации, но это кажется беспорядочным.
- К сожалению, добавление модификатора .id в GeometryReader не помогает. помощь:
Код: Выделить всё
GeometryReader { geo in
// ...
}
.id(UUID()) // 👈 doesn't help
.border(.red)
Подробнее здесь: https://stackoverflow.com/questions/797 ... rientation
Мобильная версия