Непоследовательная вставка верхней безопасной области для iPhone в альбомной ориентацииIOS

Программируем под IOS
Ответить
Anonymous
 Непоследовательная вставка верхней безопасной области для iPhone в альбомной ориентации

Сообщение Anonymous »

Я заметил проблему со вставкой верхней безопасной области на iPhone под управлением iOS 26 в альбомной ориентации. В частности, это видно при следующей конфигурации:
  • Xcode 26.0 beta 3, Swift 6, минимальная цель развертывания 18.0
  • Эмулятор iPhone 16 под управлением iOS 26.0
При этой конфигурации верхняя вставка в альбомной ориентации иногда равна 0, а иногда 20, в зависимости от ориентации устройства (симулятора), когда приложение запущено и изменилась ли ориентация. Другими словами, верхняя вставка в альбомной ориентации несовместима.
Проблему можно продемонстрировать с помощью следующего кода, который использует 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.
  • Измените ориентацию на книжную, а затем обратно на альбомную. Еще раз сравните верхнюю вставку.
Некоторые примеры запуска:
❌ Xcode 26.0 beta 3 + симулятор iPhone 16 под управлением iOS 26.0: верхняя вставка — 20 на шагах 2 + 4, но 0 на шаге 3 -> НЕТ

✔️ Xcode 26.0 beta 3 + симулятор iPhone 16 под управлением iOS 18.5: верхняя вставка всегда 0 -> ОК

✔️ Xcode 16.4 + симулятор iPhone 16 под управлением iOS 26.0: верхняя вставка всегда 0 -> ОК

✔️ Xcode 16.4 + симулятор iPhone 16 под управлением iOS 18.5: верхняя вставка всегда 0 -> ОК
Я также пробовал тесты на iPad (A16). Хотя вставки различаются для разных версий iOS, они одинаковы в книжной и альбомной ориентации. Так что нет проблем.
Я предполагаю (и надеюсь), что проблема с несогласованной вставкой на iPhone — это ошибка, поскольку она без необходимости тратит 5 % высоты экрана. Однако, если ошибка не будет устранена быстро, мне было бы интересно найти обходной путь.
  • Одним из обходных путей было бы игнорировать вставку верхней безопасной области при работе на iPhone в альбомной ориентации, но это кажется беспорядочным.
  • К сожалению, добавление модификатора .id в GeometryReader не помогает. помощь:

Код: Выделить всё

GeometryReader { geo in
// ...
}
.id(UUID()) // 👈 doesn't help
.border(.red)
Как обеспечить единообразие вставок безопасной области для iPhone в альбомной ориентации?


Подробнее здесь: https://stackoverflow.com/questions/797 ... rientation
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»