Unter iOS 26 funktioniert es wie erwartet: Die Inhaltshöhe wird gemessen und das Blatt wird verkleinert, um dieser Höhe zu entsprechen.
Unter iOS 16, 17 und 18 funktioniert derselbe Code jedoch nicht.
Die Inhaltshöhe wird immer noch gemessen, das Blatt jedoch nicht seine Höhe reduzieren. Stattdessen bleibt das Blatt größer und der Inhalt erscheint vertikal zentriert. (Beachten Sie, dass content() ScrollView enthält)
Code: Select all
public struct AutoSheetDetentModifier: ViewModifier {
@State private var height: CGFloat = 380 // default value to avoid bouncing
public func body(content: Content) -> some View {
content
.modifier(MeasureHeightViewModifier(height: $height))
.presentationDetents([.height(height)])
}
}
public struct MeasureHeightViewModifier: ViewModifier {
@Binding var height: CGFloat
public func body(content: Content) -> some View {
content
.fixedSize(horizontal: false, vertical: true)
.background(
GeometryReader { geo -> Color in
DispatchQueue.main.async {
height = geo.size.height
}
return Color.clear
}
)
}
}
extension View {
public func applyAutoSheetDetent() -> some View {
self
.modifier(AutoSheetDetentModifier())
}
}
Code: Select all
public var body: some View {
VStack {
header()
content() // this content includes scrollview inside it
footer()
}
.background(Color.customGray)
.applyAutoSheetDetent()
}

Screenshot von iOS 18 (funktioniert nicht):

Wie kann ich dafür sorgen, dass .presentationDetents(.height) das Blatt unter iOS 16–18 korrekt verkleinert, genau wie unter iOS 26?
Mobile version