- Xcode 26.0 Beta 3, Swift 6, Mindestbereitstellungsziel 18.0
- iPhone 16-Simulator mit iOS 26.0
Das Problem kann mit dem folgenden Code demonstriert werden, der einen GeometryReader verwendet, um die Bildschirmgröße und die Einschübe des sicheren Bereichs zu messen:
Code: Select all
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)
}
}
- Starten Sie den Code auf einem iPhone 16-Simulator, beginnend im Hochformat.
- Drehen Sie das Gerät ins Querformat. Beachten Sie den oberen Einschub.
- Starten Sie den Code erneut, während sich das Gerät bereits im Querformat befindet. Vergleichen Sie den oberen Einschub mit dem Einschub aus Schritt 2.
- Ändern Sie die Ausrichtung in Hochformat und dann wieder in Querformat. Vergleichen Sie den oberen Einschub noch einmal.
Ich gehe davon aus (und hoffe), dass das Problem mit dem inkonsistenten Einschub auf einem iPhone ein Fehler ist, weil dadurch 5 % der Bildschirmhöhe unnötig verschwendet werden. Sollte es sich jedoch weiterhin um einen Fehler handeln, der nicht schnell behoben wird, wäre ich an einer Problemumgehung interessiert.
- Eine Problemumgehung wäre, die Einfügung des oberen sicheren Bereichs zu ignorieren, wenn auf einem iPhone im Querformat ausgeführt wird, aber das scheint chaotisch zu sein.
- Leider funktioniert das Hinzufügen eines .id-Modifikators zum GeometryReader nicht Hilfe:
Code: Select all
GeometryReader { geo in
// ...
}
.id(UUID()) // 👈 doesn't help
.border(.red)
Mobile version