Различные результаты для разных версий iOS при расчете высоты с использованием Geometry Reader SwiftuiIOS

Программируем под IOS
Ответить
Anonymous
 Различные результаты для разных версий iOS при расчете высоты с использованием Geometry Reader Swiftui

Сообщение Anonymous »

Моя цель состоит в том, чтобы сделать представленный лист, подходящий для его содержания на iOS 16 и выше, используя презентацию. Не хочу, чтобы второй нижний лист был перетаскиваемым, он должен оставаться размером, рассчитанным по высоте содержания. < /p>
Проблем очень раздражает и в конечном итоге с разными результатами в зависимости от версий. /p>
При запуске на iPhone 15 с использованием iOS 18 Отпечатана высота будет:
height: 0.0 < /p>
Я пытался использовать ключ предпочтения , но затем, когда лист будет перетаскиваться, высота листов, конечно, будет обновлена. Я также пытался использовать .background вместо наложения, задачи, а не на onpear и т. Д. /strong> < /p>
Это минимальный воспроизводимый пример код: < /p>
import SwiftUI

@main
struct experimentingApp: App {
var body: some Scene {
WindowGroup {
ContentView(viewModel: .init())
}
}
}

enum ActiveSheet: Identifiable {

case sheetOne, sheetTwo

var id: String {
switch self {
case .sheetOne:
"sheet-one"
case .sheetTwo:
"sheet-two"
}
}
}
final class ViewModel: ObservableObject {
@Published var activeSheet: ActiveSheet? = .sheetOne

}

struct ContentView: View {
@ObservedObject var viewModel: ViewModel

@State var sheetHeight: CGFloat = .zero
var body: some View {
Text("Parent view")
.sheet(isPresented: isPresented(for: .sheetOne), content: {
VStack {
Text("Sheet one")
Button(action: { viewModel.activeSheet = .sheetTwo}, label: { Text("Next")})
}
})
.sheet(isPresented: isPresented(for: .sheetTwo), content: {
VStack(spacing: 0) {
Text("Sheet two")
Text("Sheet two")
}
.overlay(content: {
GeometryReader { proxy in
Color.clear
.ignoresSafeArea(edges: .all)
.onAppear {
print("Height: \(proxy.size.height)")
sheetHeight = proxy.size.height
}
}
})
.presentationDetents([.height(sheetHeight)])

})

}
}
extension ContentView {
func isPresented(for sheet: ActiveSheet) -> Binding {
Binding(
get: { self.viewModel.activeSheet == sheet },
set: { if !$0 { self.viewModel.activeSheet = nil } }
)
}
}



Подробнее здесь: https://stackoverflow.com/questions/794 ... sing-geome
Ответить

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

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

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

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

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