SwiftUI NavigationLink自动弹出
我有一个简单的用例,其中一个屏幕使用SwiftUI NavigationLink自动弹出,swiftui,swiftui-navigationlink,Swiftui,Swiftui Navigationlink,我有一个简单的用例,其中一个屏幕使用NavigationLink推送另一个屏幕。iOS 14.5 beta版(1、2、3)有一种奇怪的行为,按下屏幕后会弹出按下的屏幕 我设法创建了一个示例应用程序,并在其中复制了它。我认为原因在于@Environment(\.presentationMode)的存在,它似乎重新创建了视图,并导致弹出推送视图 完全相同的cod在Xcode 12/ios14.4中运行良好 下面是一个示例代码 import SwiftUI public struct FirstS
NavigationLink
推送另一个屏幕。iOS 14.5 beta版(1、2、3)有一种奇怪的行为,按下屏幕后会弹出按下的屏幕
我设法创建了一个示例应用程序,并在其中复制了它。我认为原因在于@Environment(\.presentationMode)
的存在,它似乎重新创建了视图,并导致弹出推送视图
完全相同的cod在Xcode 12/ios14.4中运行良好
下面是一个示例代码
import SwiftUI
public struct FirstScreen: View {
public init() {}
public var body: some View {
NavigationView {
List {
row
row
row
}
}
}
private var row: some View {
NavigationLink(destination: SecondScreen()) {
Text("Row")
}
}
}
struct SecondScreen: View {
@Environment(\.presentationMode) var presentationMode: Binding<PresentationMode>
public var body: some View {
VStack(spacing: 10) {
NavigationLink(destination: thirdScreenA) {
Text("Link to Third Screen A")
}
NavigationLink(destination: thirdScreenB) {
Text("Link to Third Screen B")
}
Button("Go back", action: { presentationMode.wrappedValue.dismiss() })
}
}
var thirdScreenA: some View {
Text("thirdScreenA")
}
var thirdScreenB: some View {
Text("thirdScreenB")
}
}
struct FirstScreen_Previews: PreviewProvider {
static var previews: some View {
FirstScreen()
}
}
导入快捷界面
公共结构FirstScreen:视图{
公共init(){}
公共机构:一些看法{
导航视图{
名单{
一行
一行
一行
}
}
}
私有变量行:一些视图{
导航链接(目标:SecondScreen()){
文本(“行”)
}
}
}
结构第二屏幕:视图{
@环境(\.presentationMode)变量presentationMode:绑定
公共机构:一些看法{
VStack(间距:10){
导航链接(目的地:第三屏幕){
文本(“链接到第三屏幕A”)
}
导航链接(目的地:第三屏幕){
文本(“链接到第三屏幕B”)
}
按钮(“返回”,操作:{presentationMode.wrappedValue.dismise()})
}
}
第三信条:一些观点{
文本(“第三信条”)
}
var thirdScreenB:一些观点{
文本(“第三信条”)
}
}
结构FirstScreen\u预览:PreviewProvider{
静态var预览:一些视图{
第一屏()
}
}
当正好有2个导航链接时,看起来像个bug。
如果添加另一个空链接,它将消失:
NavigationLink(destination: EmptyView(), label: {})
更多详细信息:哦,哇,太感谢了,我开始恐慌:)空的导航链接应该去哪里?我也有同样的问题(虽然我有超过2个链接),添加空链接只会修复第一个链接,但所有其他链接仍然存在popping@coopersita我在苹果开发者论坛上看到了你的评论。看来你们面临着不同的问题。如果DetailView更新了MasterView上ForEach列表中使用的数据,并导致Master重新渲染,则可能会导致弹出子视图层次结构。请提交另一个更详细的问题