可在 SwiftUI 中显示 NavigationBar 上方弹出窗口的库

FullscreenPopup

该库可以在 SwiftUI 中显示 NavigationBar 上方的弹出窗口

缘由

该库旨在解决在 SwiftUI 中显示自定义警报时遇到的特定难题,尤其是在涉及模态视图时。在标准操作中,开发者可能会使用 ZStack 或 overlay 修饰符来在现有视图上叠加额外的视图。但是,这种方法在涉及模态演示时会暴露出其局限性。

当模态视图处于活动状态时,用 ZStack 或 overlay 叠加的任何附加视图都会限制在模态视图的边界内。这种限制意味着它们无法扩展到整个屏幕,而这通常是自定义警报的关键要求,需要夺取用户的全部注意力,并防止与基础内容进行任何交互。

该库提供了一个解决方案,利用 fullscreenCover 修饰符,以确保无论有任何活动模态视图,都可以将自定义警报显示在整个屏幕上。此方法确保自定义警报不受模态视图边界的限制,从而使其可以完全覆盖背景内容并防止意外交互。

ZStack 或 overlay 该库

用法

以下是如何使用它的方法:

import SwiftUI
import FullscreenPopup

public struct ContentView: View {
    @State var isPopupPresented = false
    public var body: some View {
        Button("show popup") {
            isPopupPresented = true
        }
        .popup(isPresented: $isPopupPresented) {
            // Your custom popup content
        }
    }
}

自定义动画

您还可以通过向 .popup 修饰符提供 animation 参数来自定义动画。下面是一个示例:

.popup(isPresented: $isPopupPresented, duration: .seconds(0.5), animation: .easeIn(duration: 0.5)) {
    // Your custom popup content
}

警告 duration 参数必须大于 animationduration

自定义背景

您还可以自定义在弹出窗口后面显示的背景视图。默认情况下,使用半透明黑色视图。要使用不同的视图,请向 .popup 修饰符提供一个 background 参数:

.popup(isPresented: $isExample1Presented) { isPresented in
    LinearGradient(gradient: Gradient(colors: [.blue, .purple]), startPoint: .top, endPoint: .bottom)
        .opacity(isPresented ? 0.5 : 0)
} content: {
    // Your custom popup content
}

安装

let package = Package(
    name: "YourProject",