我有一个新的 iOS 16 SwiftUI NavigationStack,其导航由 NavigationDestination 修饰符确定,效果很好。
我的问题是,如果您在堆栈深处有多个视图,那么在清除 NavigationPath 时,为什么它不能通过滑回根视图来平滑地进行动画处理?
如果您只有一层深度,它会起作用,但任何低于该深度的内容都会导致“弹出到根”仅跳回到根视图而没有滑动动画。
这是一个“功能”还是错误,还是我做错了什么?
重新创建问题的步骤
发行演示
演示代码(使用 Xcode 14.0 和 iOS 16.0):
import SwiftUI
struct DemoPop: View {
@State private var path = NavigationPath()
var body: some View {
VStack {
NavigationStack(path: $path) {
List {
Section("List One") {
NavigationLink("Navigate to View 1", value: "View 1")
NavigationLink("Navigate to View 2", value: "View 2")
}
}
.navigationDestination(for: String.self) …Run Code Online (Sandbox Code Playgroud) 在 iOS 14 中,TextField 在选择时会自动向上滚动以避免键盘,但我无法让新的 TextEditor 控件发生同样的情况。
我已经尝试过以下方法,但没有任何效果:
Form { Section(header: Text("Section Header")) {
Spacer()
TextEditor(text: $myComments).frame(height: 100).ignoresSafeArea(.keyboard, edges: .bottom) }
}
Run Code Online (Sandbox Code Playgroud) 我想使用条件渐变将颜色应用于矩形(或其他任何东西)
像这样:
Rectangle().fill(useGradient ? .red.gradient : .red)
Run Code Online (Sandbox Code Playgroud)
但这会产生以下错误:
我可以创建两个视图并有条件地显示其中之一,但这似乎是重复的代码。
实现这一目标的最简单方法是什么?
示例代码(Xcode 14.0、iOS 16.0)
struct TestGradientView: View {
var useGradient = false
var body: some View {
Rectangle()
.fill(useGradient ? .red.gradient : .red)
.frame(width: 300, height: 440, alignment: .center)
}
}
Run Code Online (Sandbox Code Playgroud)