Из iOS 16.4 В Swiftui мы можем использовать модификатор .sheet с .presentationDetents , чтобы указать высоту нижнего листа. Мы можем дополнительно использовать .presentationBackgroundinterAction , чтобы позволить взаимодействовать с представлением, стоящим за листом. Ошибка, что иногда при переходе с одного выбора на другой лист полностью игнорирует модификаторы .presentationDetents и. Он просто показывает как модал полной высоты без какого -либо фонового взаимодействия.
import SwiftUI
import PlaygroundSupport
struct ContentView: View {
let choices = [nil, "One", "Two", "Three"]
@State var selection: String?
var body: some View {
VStack {
Picker("Choose", selection: $selection) {
ForEach(choices, id: \.self) { choice in
Text(choice ?? "None")
.tag(choice)
}
}
.padding()
Spacer()
}
.pickerStyle(.segmented)
.sheet(item: $selection) { choice in
Text("Item selected: \(choice)")
.presentationDetents([.medium])
.presentationBackgroundInteraction(
.enabled(upThrough: .medium)
)
}
}
}
extension String: Identifiable {
public var id: String { self }
}
PlaygroundPage.current.setLiveView(ContentView().frame(width: 320, height: 568))
< /code>
Вот несколько скриншотов: < /p>
no modal < /th>
modal < /th>
< /th> < / /th>
< /th>
< /th> < /th>
< /br />
< /th> нет. /> < /tr>
< /thead>
< /td>
< /td>
< /td>
наблюдения
скрывая лист (нажав 'none'), прежде чем выбрать другой выбор никогда . Прыгая непосредственно с «One 'to' Two». Будьте проблемой с выбором листа, не проходящей через состояние NIL, прежде чем переодеться в другой выбор, что для меня является совершенно обоснованной вещью, чтобы хотеть сделать (я не хочу, чтобы лист исчезал, а затем повторно оказал). /> Заранее спасибо за любые идеи! < /p>
Подробнее здесь: https://stackoverflow.com/questions/770 ... iondetents