Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios SwiftUI:轻触导航栏按钮的目标,该按钮在取消工作表后未对齐_Ios_Swift_Swiftui - Fatal编程技术网

Ios SwiftUI:轻触导航栏按钮的目标,该按钮在取消工作表后未对齐

Ios SwiftUI:轻触导航栏按钮的目标,该按钮在取消工作表后未对齐,ios,swift,swiftui,Ios,Swift,Swiftui,我注意到在使用iOS 13.3.1及更早版本的SwiftUI中出现了一种相当奇怪、可能有bug的行为。为了演示这个非常简单的场景: 完整示例代码: import SwiftUI struct ContentView: View { @State var showingSheet: Bool = false var body: some View { NavigationView { Text("ParentView")

我注意到在使用iOS 13.3.1及更早版本的SwiftUI中出现了一种相当奇怪、可能有bug的行为。为了演示这个非常简单的场景:

完整示例代码:

import SwiftUI

struct ContentView: View {
    @State var showingSheet: Bool = false
    var body: some View {
        NavigationView {
            Text("ParentView")
                .navigationBarItems(trailing: Button(action: { self.showingSheet = true }) { Text("Show") })
        }.sheet(isPresented: $showingSheet) { SheetView() }
    }
}

struct SheetView: View {
    @Environment(\.presentationMode) var presentationMode
    var body: some View {
        VStack {
            Text("Sheet content")
            Button(action: { self.presentationMode.wrappedValue.dismiss() }) { Text("Hide") }
        }
    }
}

复制:

import SwiftUI

struct ContentView: View {
    @State var showingSheet: Bool = false
    var body: some View {
        NavigationView {
            Text("ParentView")
                .navigationBarItems(trailing: Button(action: { self.showingSheet = true }) { Text("Show") })
        }.sheet(isPresented: $showingSheet) { SheetView() }
    }
}

struct SheetView: View {
    @Environment(\.presentationMode) var presentationMode
    var body: some View {
        VStack {
            Text("Sheet content")
            Button(action: { self.presentationMode.wrappedValue.dismiss() }) { Text("Hide") }
        }
    }
}
  • 在iOS 13.4.1上启动应用程序
  • 点击“显示”按钮
  • (如图所示)
  • 使用“隐藏”按钮关闭工作表
  • (如预期,该表已作废)
  • 尝试使用“显示”按钮再次显示工作表
  • 预期结果:工作表再次显示

    实际结果:将“显示”按钮的点击目标移动到底部一些像素,导致操作未触发。这也可以在视图层次调试器中观察到:

    其他观察结果:

    import SwiftUI
    
    struct ContentView: View {
        @State var showingSheet: Bool = false
        var body: some View {
            NavigationView {
                Text("ParentView")
                    .navigationBarItems(trailing: Button(action: { self.showingSheet = true }) { Text("Show") })
            }.sheet(isPresented: $showingSheet) { SheetView() }
        }
    }
    
    struct SheetView: View {
        @Environment(\.presentationMode) var presentationMode
        var body: some View {
            VStack {
                Text("Sheet content")
                Button(action: { self.presentationMode.wrappedValue.dismiss() }) { Text("Hide") }
            }
        }
    }
    
    • 通过将工作表拖动到屏幕底部来关闭工作表时,不会发生这种情况
    • 只有在为宿主视图激活了大型导航项标题时才会发生这种情况,使用内联标题也可以

    所以现在我在这里想:我是犯了一个错误,还是这是一个真正的SwiftUI错误?如果是,是否有一个简单的解决方法?我搜索了类似的问题,但没有发现任何相同的问题

    编辑:在此期间,我将此作为雷达反馈FB7560960提交给苹果公司


    编辑2:仍然发生在13.4.1中。

    我不知道为什么,但添加了
    @Environment(\.presentationMode)var presentationMode

    使用
    contentView
    似乎可以解决这个问题。

    的确如此!这似乎会在取消模式时触发ContentView的重新呈现,并在修复过程中修复错误。在我看来,与其说是一个解决方案,不如说是一个变通办法,但确实奏效了!谢谢你。这对我似乎不起作用。对于
    contentView
    您是指
    contentView
    ?创建作为应用程序初始视图的新SwiftUI项目时生成的结构?