如何在SwiftUI中移除顶部安全区域

20

我正在使用SwiftUI开发屏幕,希望将我的视图显示在屏幕的顶部安全区域,是否有任何方法可以在SwiftUI中实现这一点?

4个回答

35
使用这个修饰符:
.edgesIgnoringSafeArea(.top)

如果您想忽略所有安全区域插图,可以传递 .all


5
在这种情况下,edgesIgnoringSafeArea(.top)会更好。 - Radagast
我应该将其应用到手表的哪个视图? - Jonas Sourlier

16

SwiftUI 2.0

您可以使用此修改器传递要忽略的区域和边缘。

.ignoresSafeArea(.container, edges: .top)

注意: 两个参数都是可选的

当你需要将键盘视为区域并对其做出反应时,此修改器非常有用。旧修改器尚未过时,您仍然可以使用它作为主要方法:


SwiftUI 1.0

如果需要支持iOS 13,请使用此修改器。

.edgesIgnoringSafeArea(.top)

注意:

如果您想忽略所有边缘,请传递.all以用于两个修饰符。


2
/**
 This extension is needed because of deprecating edgesignoringsafearea for iOS 13.0–15.2
 https://developer.apple.com/documentation/swiftui/menu/edgesignoringsafearea(_:)
 */
public extension View {
    @ViewBuilder
    func expandViewOutOfSafeArea(_ edges: Edge.Set = .all) -> some View {
        if #available(iOS 14, *) {
            self.ignoresSafeArea(edges: edges)
        } else {
            self.edgesIgnoringSafeArea(edges) // deprecated for iOS 13.0–15.2, look upper
        }
    }
}

如何使用:

MyView()
   .expandViewOutOfSafeArea()

2

默认情况下,SwiftUI视图大部分会停留在安全区域内。它将会到达屏幕底部,但不会靠近设备顶部的缺口。如果您希望您的视图真正成为全屏幕,则应使用edgesIgnoringSafeArea()修饰符。

struct MyView : View {

    var body: some View {
         Text("Welcome to Swift UI")
        .frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: .infinity)
        .edgesIgnoringSafeArea(.top)
     }
    }

3
我已经尝试过这个方法,确实可以去掉安全区域,但是在原本安全区域的位置触摸操作会被忽略。而且NavigationBarTitle也不会移动。需要的是一种简单地关闭安全区域的方法。 - easiwriter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接