小编Mgw*_*gwd的帖子

为什么清除新的 iOS 16 SwiftUI NavigationPath 到“弹出到根目录”时不能平滑地返回到根视图?

我有一个新的 iOS 16 SwiftUI NavigationStack,其导航由 NavigationDestination 修饰符确定,效果很好。

我的问题是,如果您在堆栈深处有多个视图,那么在清除 NavigationPath 时,为什么它不能通过滑回根视图来平滑地进行动画处理?

如果您只有一层深度,它会起作用,但任何低于该深度的内容都会导致“弹出到根”仅跳回到根视图而没有滑动动画。

这是一个“功能”还是错误,还是我做错了什么?

重新创建问题的步骤

  • 运行下面的示例代码。
  • 单击第一个导航链接,然后单击“弹出到根视图” - 请注意,它“平滑地”滑回到根视图。
  • 单击第一个或第二个链接 - 然后单击显示视图 3 的“导航到视图 3”。
  • 然后单击“Pop to Root”,您会注意到它跳回到根视图而不是幻灯片。这就是我的问题——它应该跳回来还是滑回来?

发行演示

在此输入图像描述

演示代码(使用 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)

swiftui ios16 xcode14 swiftui-navigationstack

25
推荐指数
2
解决办法
5520
查看次数

在 SwiftUI iOS 14 中,为什么 TextEditor 控件不像 TextField 那样自动向上滚动以避免键盘?

在 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)

text-editor swiftui

18
推荐指数
0
解决办法
1865
查看次数

如何使用三元运算符将填充修改器应用到具有条件渐变的 SwiftUI 矩形

我想使用条件渐变将颜色应用于矩形(或其他任何东西)

像这样:

Rectangle().fill(useGradient ? .red.gradient : .red)
Run Code Online (Sandbox Code Playgroud)

但这会产生以下错误:

  • “AnyGradient”中的成员“red”生成“Color”类型的结果,但上下文需要“AnyGradient”
  • 静态属性“red”要求类型“AnyGradient”和“Color”等效

我可以创建两个视图并有条件地显示其中之一,但这似乎是重复的代码。

实现这一目标的最简单方法是什么?

示例代码(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)

gradient modifier swiftui

1
推荐指数
1
解决办法
697
查看次数