kon*_*iki 20 swiftui swiftui-navigationlink swiftui-navigationview
鉴于这个简单NavigationView
:
struct ContentView : View {
var body: some View {
NavigationView {
VStack {
NavigationLink("Push Me", destination: Text("PUSHED VIEW"))
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
NavigationView
当目标视图被推入/弹出堆栈时,有没有人找到禁用动画的方法?
从 iOS2.0 开始,这在 UIKit 中已经成为可能!我认为从框架中提出的要求并不过分。我在所有视图上尝试了各种修饰符(即NavigationView
容器、目标视图NavigationLink
、 等)
这些是我尝试过的一些修饰符:
.animation(nil)
Run Code Online (Sandbox Code Playgroud)
.transition(.identity)
Run Code Online (Sandbox Code Playgroud)
.transaction { t in t.disablesAnimations = true }
Run Code Online (Sandbox Code Playgroud)
.transaction { t in t.animation = nil }
Run Code Online (Sandbox Code Playgroud)
没有任何区别。我没有发现任何有用的东西EnvironmentValues
:-(
我是否遗漏了一些非常明显的东西,或者功能还不存在?
FRI*_*DAY 19
Xcode 11.3:
现在没有禁用NavigationView
动画的修饰符。
您可以使用您的结构init()
来禁用动画,如下所示:
struct ContentView : View {
init(){
UINavigationBar.setAnimationsEnabled(false)
}
var body: some View {
NavigationView {
VStack {
NavigationLink("Push Me", destination: Text("PUSHED VIEW"))
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
mal*_*hal 17
\nSwiftUI,新功能
\n早期的iOS
\n首先,您需要响应的状态NavigationLink
,然后在禁用动画的事务中设置该状态,如下所示:
struct ContentView : View {\n @State var isActive = false\n \n var body: some View {\n NavigationView {\n VStack {\n NavigationLink(isActive: $isActive, destination: {\n Text("PUSHED VIEW")}) {\n Text("Push Me")\n }\n Button("Navigate Without Animation") {\n var transaction = Transaction()\n transaction.disablesAnimations = true\n withTransaction(transaction) {\n isActive = true\n }\n }\n }\n }\n }\n}\n
Run Code Online (Sandbox Code Playgroud)\n
swiftui-navigation-stack
我最近创建了一个名为(https://github.com/biobeats/swiftui-navigation-stack )的开源项目,其中包含NavigationStackView
一个模仿标准导航行为的视图,NavigationView
添加了一些有用的功能。例如,您可以NavigationStackView
按照问题中 Kontiki 的要求使用并禁用过渡动画。当您创建时NavigationStackView
只需指定.none
为transitionType
:
struct ContentView : View {
var body: some View {
NavigationStackView(transitionType: .none) {
ZStack {
Color.yellow.edgesIgnoringSafeArea(.all)
PushView(destination: View2()) {
Text("PUSH")
}
}
}
}
}
struct View2: View {
var body: some View {
ZStack {
Color.green.edgesIgnoringSafeArea(.all)
PopView {
Text("POP")
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
PushView
和PopView
是两个允许您推送和弹出视图的视图(类似于 SwiftUI NavigationLink
)。这是完整的示例:
import SwiftUI
import NavigationStack
struct ContentView : View {
var body: some View {
NavigationStackView(transitionType: .none) {
ZStack {
Color.yellow.edgesIgnoringSafeArea(.all)
PushView(destination: View2()) {
Text("PUSH")
}
}
}
}
}
struct View2: View {
var body: some View {
ZStack {
Color.green.edgesIgnoringSafeArea(.all)
PopView {
Text("POP")
}
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
Run Code Online (Sandbox Code Playgroud)
结果是:
如果你们和我一起改进这个开源项目,那就太好了。
归档时间: |
|
查看次数: |
4263 次 |
最近记录: |