Я ожидал, что вид прокрутки будет соответствовать безопасной области. Почему бы не здесь? А что такое scrollClipDisabled
?
struct ContentView: View {
var body: some View {
ZStack {
Color.red
PrimaryView()
.scrollClipDisabled(false)
}
}
}
struct PrimaryView: View {
var body: some View {
ScrollView(.horizontal) {
HStack {
ForEach(0...100, id: \.self) { _ in
hello
}
}
.padding()
}
}
private var hello: some View {
HStack {
Image(systemName: "globe")
.imageScale(.large)
.foregroundStyle(.tint)
Text("Hello, world!")
}
}
}
Объясните, что вы поняли из документации и что еще вы хотите об этом узнать.
@Sweeper «По умолчанию при прокрутке содержимое обрезается до границ, но вы можете отключить это поведение...»
Я согласен, что странно, что ScrollView
, кажется, намерен игнорировать края безопасной области, даже когда вы устанавливаете .scrollClipDisabled(false)
, как вы это делаете. Я нахожу двойную отрицательную маркировку немного запутанной: (клип отключен == false) означает (клип включен == true).
Если вы добавите рамку к ScrollView
, вы увидите, что рамка соблюдает края безопасной области, а прокручиваемый контент — нет:
ScrollView(.horizontal) {
// ...
}
.border(.yellow, width: 2)
Один из обходных путей — добавить .clipShape
к ScrollView
:
PrimaryView()
.scrollClipDisabled(false)
.clipShape(Rectangle())
Однако при таком подходе индикатор прокрутки исчезает в стороны.
Если индикатор прокрутки должен быть видимым, как в вашем примере, другим обходным решением является добавление номинального горизонтального заполнения. Это нарушает контакт с краями безопасной области, поэтому края больше не игнорируются. Я обнаружил, что 0,1 недостаточно, но 0,2 вроде работает:
PrimaryView()
.scrollClipDisabled(false)
.padding(.horizontal, 0.2)
@Sweeper Я прочитал документацию. Пожалуйста, прочтите ОП. отключен == ложь.