SwiftUI:为啥proxy.safeAreaInsets.bottom的高度等于keyboardHeight?

Posted

技术标签:

【中文标题】SwiftUI:为啥proxy.safeAreaInsets.bottom的高度等于keyboardHeight?【英文标题】:SwiftUI: Why is the height of proxy.safeAreaInsets.bottom equal to keyboardHeight?SwiftUI:为什么proxy.safeAreaInsets.bottom的高度等于keyboardHeight? 【发布时间】:2020-10-19 00:01:13 【问题描述】:

所以 iPhone 11 Pro Max 上的 safeAreaInset.bottom 是 34.0,但是当键盘打开时,它会将 safeAreaInset.bottom 更改为键盘的高度(346.0 点)。有什么方法可以在键盘打开时访问 safeAreaInset.bottom 值(34.0)?

作为参考,我的内容视图中有一个几何阅读器:

var body: some View 
    GeometryReader  proxy in
        //I pass in proxy into views in here and then access the safe area with proxy.safeAreaInsets.bottom
    

我还需要它适用于所有设备,似乎为不同设备制作一堆 if 语句是一个非常糟糕的解决方案。有人有建议吗?

【问题讨论】:

【参考方案1】:

这是可能的解决方案。使用 Xcode 12 / ios 14 测试

var body: some View

    GeometryReader
     gp in
        VStack
        
            Text("Bottom: \(gp.safeAreaInsets.bottom)")
            Spacer()
            TextField("Value", text: $selection)
            Spacer()
        
    .ignoresSafeArea(.keyboard, edges: .bottom)     // << here !!

【讨论】:

谢谢!像魅力一样工作!为什么它会起作用?这是什么逻辑?

以上是关于SwiftUI:为啥proxy.safeAreaInsets.bottom的高度等于keyboardHeight?的主要内容,如果未能解决你的问题,请参考以下文章

为啥自定义 SwiftUI 视图不响应状态变化

SwiftUI,为啥部分视图没有刷新? @State 变量未更新

SwiftUI:为啥这个 ScrollView 的内容错位了?

SwiftUI - 为啥 contentShape 会阻止单击叠加层?

为啥 SwiftUI 不能正确显示两个视图?

为啥修饰符顺序在 SwiftUI 中很重要? [复制]