微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使自定义导航栏背景颜色超出 SwiftUI 中的安全区域

如何解决如何使自定义导航栏背景颜色超出 SwiftUI 中的安全区域

我实现了一个自定义导航栏,它只是一个带有标题文本和关闭视图的箭头的视图。我只希望导航栏的背景颜色超出顶部安全区域,而内容遵守安全区域约束

这是自定义导航栏的代码

struct CustomNavigationBar: View {
    
    @Environment(\.presentationMode) var presentationMode
    let title: String
    
    var body: some View {
        HStack {
            Button(action: {
                presentationMode.wrappedValue.dismiss()
            },label: {
                Image(systemName: "chevron.left")
                    .font(.title2)
                    .foregroundColor(Globals.Color.background)
            })
            Spacer()
            Text(title)
                .font(.title2)
                .bold()
                .foregroundColor(Globals.Color.background)
            Spacer()
        }
        .padding()
        .background(Globals.Color.crimson)
    }
}

以下是使用自定义导航栏的示例视图的代码

var body: some View {
    ZStack {
        vstack {
            CustomNavigationBar(title: "Sample Title")
            Spacer()
        }
    }
}

下面我附上了当前视图的屏幕截图:

Navigation bar view's red background stops at safe area]

解决方法

你应该在深红色背景上放一个 ignoresSafeArea

struct CustomNavigationBar: View {
    
    @Environment(\.presentationMode) var presentationMode
    let title: String
    
    var body: some View {
        HStack {
            
            Button(action: {
                presentationMode.wrappedValue.dismiss()
            },label: {
                Image(systemName: "chevron.left")
                    .font(.title2)
                    .foregroundColor(Color.white)
            })
            Spacer()
            Text(title)
                .font(.title2)
                .bold()
                .foregroundColor(Color.white)
            Spacer()
            
        }
        .padding()
        .background(Color.red.ignoresSafeArea()) /// here!
    }
}

结果:

Red background expands to fill screen,while inner text respects safe area

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。