带有表单的 SwiftUI 模态表:设备旋转后左/右填充错误

Posted

技术标签:

【中文标题】带有表单的 SwiftUI 模态表:设备旋转后左/右填充错误【英文标题】:SwiftUI modal sheet with Form: wrong left/right padding after device rotation 【发布时间】:2020-06-29 18:35:04 【问题描述】:

当打开包含表单的模式表,然后将设备旋转到横向模式并返回纵向模式时,一切正常。但是,如果模态表在横向模式下打开然后旋转到纵向模式,则左侧和右侧的填充不符合预期。我认为这是 SwiftUI 中的一个错误。有解决办法吗?

struct ContentView: View 
    @State var modalDisplayed = false
    
    var body: some View 
        Button(action:  self.modalDisplayed = true ) 
            Text("Show Modal")
        .sheet(isPresented: $modalDisplayed) 
            Form
                Section(header: Text("Section"))
                    
                    Text("This is a test.")
                
            
        
    

它的外观:

如果模态表以横向打开然后旋转为纵向时的外观:

【问题讨论】:

适用于 Xcode 12 / ios 14 问题是应用应该在iOS 13上运行...有没有办法手动设置边框? 也适用于 Xcode 11.4 / iOS 13.4。这真的是那个代码吗? Xcode 11.5 / iOS 13.5 对我来说无法正常工作。 所以这是 Xcode 11.5 / iOS 13.5 中的错误?我目前无法访问 Xcode 11.4 / iOS 13.4... 【参考方案1】:

.edgesIgnoringSafeArea(.all) 为我解决了这个问题。 (使用 Xcode 11.5 / iOS 13.5)

struct ContentView: View 
    @State var modalDisplayed = false
    
    var body: some View 
        Button(action:  self.modalDisplayed = true ) 
            Text("Show Modal")
        .sheet(isPresented: self.$modalDisplayed) 
            Form 
                Section(header: Text("Section"))
                    Text("This is a test.")
                
            
            .edgesIgnoringSafeArea(.all)
        
    

【讨论】:

坏消息:但是,使用 Xcode 12 / iOS 14,无论有无 .edgesIgnoringSafeArea(.all) - 在横向模式下都有填充。因此,这在某种程度上是不确定的? 另外,这对我不起作用。我运行了您的代码,但问题仍然存在 据我所知,它几乎适用于除 iPhone X/XS/11 Pro 以外的所有设备。很奇怪。 这怎么可能?我什至在两台 Mac 上都试过了……真的很奇怪。 我在 iOS 13.6 和 iOS 14 上对其进行了测试。对我来说,您的解决方案不适用于 iOS 13.6。但是,该错误不会在 iOS 14 上发生。我想我必须等待...:/

以上是关于带有表单的 SwiftUI 模态表:设备旋转后左/右填充错误的主要内容,如果未能解决你的问题,请参考以下文章

在 Swiftui 中如何通过旋转到横向自动关闭模态

Apple Watch 模态表中的 SwiftUI 图像

无法在 SwiftUI 中使用 ForEach 和 CoreData 将数据正确传递给模态演示

SwiftUI:模态表隐藏 ProgressView

显示模态视图控制器时设备旋转

设备旋转后动画点重新定位