View

public extension View
  • Presents a bottom sheet that, unless manually toggling the isPresented property, this sheet will not be dismissed when dragging down.

    Declaration

    Swift

    @available(iOS 16.4, *)
    @ViewBuilder
    func bpkBottomSheet<BottomSheetContent: View>(
        isPresented: Binding<Bool>,
        peekHeight: CGFloat,
        contentMode: BPKBottomSheetContentMode = .medium,
        closeButtonAccessibilityLabel: String? = nil,
        title: String? = nil,
        action: BPKBottomSheetAction? = nil,
        @ViewBuilder bottomSheetContent: @escaping () -> BottomSheetContent
    ) -> some View

    Parameters

    isPresented

    A binding to whether the bottom sheet should be shown.

    peekHeight

    The height of the sheet when it is peeking the screen.

    contentMode

    The content mode of the bottom sheet. Defaults to .medium.

    closeButtonAccessibilityLabel

    The accessibility label for the close button. If nil, the close button will not be shown.

    title

    The title of the bottom sheet. If nil, the title will not be shown.

    action

    The action button of the bottom sheet. If nil, the action button will not be shown.

    bottomSheetContent

    The content of the bottom sheet.

  • Presents a bottom sheet.

    Note

    For iOS 16 users and above, the bottom sheet will be presented using SwiftUI’s native BottomSheet view. For iOS 15 users and below, the bottom sheet will be presented using a custom implementation.

    Declaration

    Swift

    @ViewBuilder
    func bpkBottomSheet<BottomSheetContent: View>(
        isPresented: Binding<Bool>,
        contentMode: BPKBottomSheetContentMode = .medium,
        closeButtonAccessibilityLabel: String? = nil,
        title: String? = nil,
        action: BPKBottomSheetAction? = nil,
        presentingController: UIViewController,
        @ViewBuilder bottomSheetContent: @escaping () -> BottomSheetContent
    ) -> some View

    Parameters

    isPresented

    A binding to whether the bottom sheet should be shown.

    contentMode

    The content mode of the bottom sheet. Defaults to .medium.

    closeButtonAccessibilityLabel

    The accessibility label for the close button. If nil, the close button will not be shown.

    title

    The title of the bottom sheet. If nil, the title will not be shown.

    action

    The action button of the bottom sheet. If nil, the action button will not be shown.

    bottomSheetContent

    The content of the bottom sheet.

  • Presents a bottom sheet that, unless manually setting the item property to nil, this sheet will not be dismissed when dragging down.

    Declaration

    Swift

    @available(iOS 16.4, *)
    @ViewBuilder
    func bpkBottomSheet<BottomSheetContent: View, Item: Identifiable>(
        item: Binding<Item?>,
        peekHeight: CGFloat,
        contentMode: BPKBottomSheetContentMode = .medium,
        closeButtonAccessibilityLabel: String? = nil,
        title: String? = nil,
        action: BPKBottomSheetAction? = nil,
        presentingController: UIViewController,
        @ViewBuilder bottomSheetContent: @escaping (Item) -> BottomSheetContent
    ) -> some View

    Parameters

    item

    A binding to an optional source of truth for the sheet. When item is non-nil, the system passes the item’s content to the modifier’s closure.

    peekHeight

    The height of the sheet when it is peeking the screen.

    contentMode

    The content mode of the bottom sheet. Defaults to .medium.

    closeButtonAccessibilityLabel

    The accessibility label for the close button. If nil, the close button will not be shown.

    title

    The title of the bottom sheet. If nil, the title will not be shown.

    action

    The action button of the bottom sheet. If nil, the action button will not be shown.

    bottomSheetContent

    The content of the bottom sheet.

  • Presents a bottom sheet.

    Declaration

    Swift

    @ViewBuilder
    func bpkBottomSheet<BottomSheetContent: View, Item: Identifiable>(
        item: Binding<Item?>,
        contentMode: BPKBottomSheetContentMode = .medium,
        closeButtonAccessibilityLabel: String? = nil,
        title: String? = nil,
        action: BPKBottomSheetAction? = nil,
        presentingController: UIViewController,
        @ViewBuilder bottomSheetContent: @escaping (Item) -> BottomSheetContent
    ) -> some View

    Parameters

    item

    A binding to an optional source of truth for the sheet. When item is non-nil, the system passes the item’s content to the modifier’s closure.

    contentMode

    The content mode of the bottom sheet. Defaults to .medium.

    closeButtonAccessibilityLabel

    The accessibility label for the close button. If nil, the close button will not be shown.

    title

    The title of the bottom sheet. If nil, the title will not be shown.

    action

    The action button of the bottom sheet. If nil, the action button will not be shown.

    bottomSheetContent

    The content of the bottom sheet.

  • Declaration

    Swift

    func background(_ color: BPKColor, alignment: Alignment = .center) -> some View
  • Declaration

    Swift

    func foregroundColor(_ color: BPKColor) -> some View
  • Displays a success dialog with a title, text and a list of buttons.

    Declaration

    Swift

    func bpkSuccessDialog(
        presented: Binding<Bool>,
        icon: BPKIcon,
        title: String,
        text: String,
        confirmButton: BPKDialogButton,
        secondaryActions: BPKDialogSecondaryActions? = nil,
        presentingController: UIViewController,
        onTouchOutside: (() -> Void)? = nil
    ) -> some View
  • Displays a warning dialog with a title, text and a list of buttons.

    Declaration

    Swift

    func bpkWarningDialog(
        presented: Binding<Bool>,
        icon: BPKIcon,
        title: String,
        text: String,
        confirmButton: BPKDialogButton,
        secondaryActions: BPKDialogSecondaryActions? = nil,
        presentingController: UIViewController,
        onTouchOutside: (() -> Void)? = nil
    ) -> some View
  • Displays a destructive dialog with a title, text and a list of buttons.

    Declaration

    Swift

    func bpkDestructiveDialog(
        presented: Binding<Bool>,
        icon: BPKIcon,
        title: String,
        text: String,
        confirmButton: BPKDialogButton,
        linkButton: BPKDialogButton? = nil,
        presentingController: UIViewController,
        onTouchOutside: (() -> Void)? = nil
    ) -> some View
  • Displays a dialog with an image, title, text and a list of buttons.

    Declaration

    Swift

    func bpkImageDialog(
        presented: Binding<Bool>,
        image: Image,
        title: String,
        text: String,
        confirmButton: BPKDialogButton,
        secondaryActions: BPKDialogSecondaryActions? = nil,
        presentingController: UIViewController,
        onTouchOutside: (() -> Void)? = nil
    ) -> some View
  • Displays a dialog with an image with a flare, title, text and a list of buttons.

    Declaration

    Swift

    func bpkFlareDialog(
        presented: Binding<Bool>,
        image: Image,
        title: String,
        text: String,
        confirmButton: BPKDialogButton,
        secondaryActions: BPKDialogSecondaryActions? = nil,
        presentingController: UIViewController,
        onTouchOutside: (() -> Void)? = nil
    ) -> some View
  • Displays a success dialog with a title, text and a list of buttons.

    Declaration

    Swift

    func bpkSuccessDialogView(
        presented: Binding<Bool>,
        icon: BPKIcon,
        title: String,
        text: String,
        confirmButton: BPKDialogButton,
        secondaryActions: BPKDialogSecondaryActions? = nil,
        onTouchOutside: (() -> Void)? = nil
    ) -> some View
  • Displays a warning dialog with a title, text and a list of buttons.

    Declaration

    Swift

    func bpkWarningDialogView(
        presented: Binding<Bool>,
        icon: BPKIcon,
        title: String,
        text: String,
        confirmButton: BPKDialogButton,
        secondaryActions: BPKDialogSecondaryActions? = nil,
        onTouchOutside: (() -> Void)? = nil
    ) -> some View
  • Displays a destructive dialog with a title, text and a list of buttons.

    Declaration

    Swift

    func bpkDestructiveDialogView(
        presented: Binding<Bool>,
        icon: BPKIcon,
        title: String,
        text: String,
        confirmButton: BPKDialogButton,
        linkButton: BPKDialogButton? = nil,
        onTouchOutside: (() -> Void)? = nil
    ) -> some View
  • Displays a dialog with an image, title, text and a list of buttons.

    Declaration

    Swift

    func bpkImageDialogView(
        presented: Binding<Bool>,
        image: Image,
        title: String,
        text: String,
        confirmButton: BPKDialogButton,
        secondaryActions: BPKDialogSecondaryActions? = nil,
        onTouchOutside: (() -> Void)? = nil
    ) -> some View
  • Displays a dialog with an image with a flare, title, text and a list of buttons.

    Declaration

    Swift

    func bpkFlareDialogView(
        presented: Binding<Bool>,
        image: Image,
        title: String,
        text: String,
        confirmButton: BPKDialogButton,
        secondaryActions: BPKDialogSecondaryActions? = nil,
        onTouchOutside: (() -> Void)? = nil
    ) -> some View
  • Declaration

    Swift

    @ViewBuilder
    func bpkImageGalleryGrid<CategoryView, GridImage, SlideshowImage>(
        isPresented: Binding<Bool>,
        selectedCategory: Binding<Int>,
        categories: [BPKImageGalleryImageCategory<CategoryView, GridImage, SlideshowImage>],
        closeAccessibilityLabel: String,
        onImageTapped: @escaping (_ category: Int, _ image: Int) -> Void,
        onCloseTapped: @escaping () -> Void
    ) -> some View
  • Declaration

    Swift

    @ViewBuilder
    func bpkImageGalleryGrid<GridImage, SlideshowImage>(
        isPresented: Binding<Bool>,
        selectedCategory: Binding<Int>,
        categories: [BPKImageGalleryChipCategory<GridImage, SlideshowImage>],
        closeAccessibilityLabel: String,
        onImageTapped: @escaping (_ category: Int, _ image: Int) -> Void,
        onCloseTapped: @escaping () -> Void
    ) -> some View
  • Declaration

    Swift

    func bpkImageGallerySlideshow<Content>(
        isPresented: Binding<Bool>,
        images: [BPKSlideshowGalleryImage<Content>],
        closeAccessibilityLabel: String,
        currentIndex: Binding<Int>,
        onCloseTapped: @escaping () -> Void
    ) -> some View
  • Applies an overlay to the view.

    Declaration

    Swift

    func bpkOverlay(_ type: BPKOverlayType) -> some View

    Parameters

    type

    The type of overlay to apply.

    Return Value

    A view with the overlay applied.

  • Declaration

    Swift

    func shadow(_ shadow: BPKShadow) -> some View
  • Declaration

    Swift

    @ViewBuilder
    func shimmering() -> some View
  • Adds a specific padding amount to each edge of this view.

    Use this modifier to add padding all the way around a view.

    VStack {
        Text("Text padded by BPKSpacing.md on each edge")
            .padding(.md)
        Text("Unpadded text for comparison.")
    }
    

    The order in which you apply modifiers matters. The example above applies the padding before applying the border to ensure that the border encompasses the padded region:

    To pad a select set of edges by the same amount, use padding(_:_:).

    Declaration

    Swift

    func padding(_ spacing: BPKSpacing) -> some View

    Parameters

    length

    The amount to pad this view on all edges.

    Return Value

    A view that’s padded by the spacing token you specify.

  • Adds an equal padding amount to specific edges of this view.

    Use this modifier to add a specified amount of padding to one or more edges of the view. Indicate the edges to pad by naming either a single value from Edge/Set, or by specifying an OptionSet that contains edge values:

    VStack {
        Text("Text padded by BPKSpacing.base on the bottom and trailing edges.")
            .padding([.bottom, .trailing], .base)
        Text("Unpadded text for comparison.")
    }
    

    The order in which you apply modifiers matters. The example above applies the padding before applying the border to ensure that the border encompasses the padded region:

    Declaration

    Swift

    func padding(_ edge: Edge.Set, _ spacing: BPKSpacing) -> some View

    Parameters

    edges

    The set of edges to pad for this view.

    length

    An amount to pad this view on the specified edges.

    Return Value

    A view that’s padded by the specified amount on the specified edges.

  • Positions this view within an invisible frame with the specified size.

    Use this method to specify a fixed size for a view’s width, height, or both. If you only specify one of the dimensions, the resulting view assumes this view’s sizing behavior in the other dimension.

    For example, the following code lays out an ellipse in a fixed BPKSpacing.md by BPKSpacing.sm frame. Because a shape always occupies the space offered to it by the layout system, the first ellipse is .md x .sm points. The second ellipse is laid out in a frame with only a fixed height, so it occupies that height, and whatever width the layout system offers to its parent.

    VStack {
        Ellipse()
            .frame(width: .md, height: .sm)
        Ellipse()
            .frame(height: .sm)
    }
    

    The alignment parameter specifies this view’s alignment within the frame.

    BPKText("Hello world!")
        .frame(width: .lg, height: .md, alignment: .topLeading)
        .border(.lineColor)
    

    In the example above, the text is positioned at the top, leading corner of the frame. If the text is taller than the frame, its bounds may extend beyond the bottom of the frame’s bounds.

    Declaration

    Swift

    func frame(width: BPKSpacing? = nil, height: BPKSpacing? = nil, alignment: Alignment = .center) -> some View

    Parameters

    width

    A fixed width for the resulting view. If width is nil, the resulting view assumes this view’s sizing behavior.

    height

    A fixed height for the resulting view. If height is nil, the resulting view assumes this view’s sizing behavior.

    alignment

    The alignment of this view inside the resulting frame. Note that most alignment values have no apparent effect when the size of the frame happens to match that of this view.

    Return Value

    A view with fixed dimensions of width and height, for the parameters that are non-nil.

  • Positions this view within an invisible frame having the specified size constraints.

    Always specify at least one size characteristic when calling this method. Pass nil or leave out a characteristic to indicate that the frame should adopt this view’s sizing behavior, constrained by the other non-nil arguments.

    The size proposed to this view is the size proposed to the frame, limited by any constraints specified, and with any ideal dimensions specified replacing any corresponding unspecified dimensions in the proposal.

    If no minimum or maximum constraint is specified in a given dimension, the frame adopts the sizing behavior of its child in that dimension. If both constraints are specified in a dimension, the frame unconditionally adopts the size proposed for it, clamped to the constraints. Otherwise, the size of the frame in either dimension is:

    • If a minimum constraint is specified and the size proposed for the frame by the parent is less than the size of this view, the proposed size, clamped to that minimum.
    • If a maximum constraint is specified and the size proposed for the frame by the parent is greater than the size of this view, the proposed size, clamped to that maximum.
    • Otherwise, the size of this view.

    Declaration

    Swift

    func frame(
        minWidth: BPKSpacing? = nil,
        idealWidth: BPKSpacing? = nil,
        maxWidth: BPKSpacing? = nil,
        minHeight: BPKSpacing? = nil,
        idealHeight: BPKSpacing? = nil,
        maxHeight: BPKSpacing? = nil,
        alignment: Alignment = .center
    ) -> some View

    Parameters

    minWidth

    The minimum width of the resulting frame.

    idealWidth

    The ideal width of the resulting frame.

    maxWidth

    The maximum width of the resulting frame.

    minHeight

    The minimum height of the resulting frame.

    idealHeight

    The ideal height of the resulting frame.

    maxHeight

    The maximum height of the resulting frame.

    alignment

    The alignment of this view inside the resulting frame. Note that most alignment values have no apparent effect when the size of the frame happens to match that of this view.

    Return Value

    A view with flexible dimensions given by the call’s non-nil parameters.

  • Declaration

    Swift

    @ViewBuilder
    func `if`<Content>(_ condition: Bool, transform: (Self) -> Content) -> some View where Content : View
  • Sets the Dynamic Type size within the view to the given value. (Polyfill for previous versions)

    Declaration

    Swift

    @available(iOS, introduced: 13.0, deprecated: 100000.0, renamed: "dynamicTypeSize(_:﹚")
    @available(macOS, introduced: 10.15, deprecated: 100000.0, renamed: "dynamicTypeSize(_:﹚")
    @available(tvOS, introduced: 13.0, deprecated: 100000.0, renamed: "dynamicTypeSize(_:﹚")
    @available(watchOS, introduced: 6.0, deprecated: 100000.0, renamed: "dynamicTypeSize(_:﹚")
    func sizeCategory(_ size: ContentSizeCategory) -> some View
  • Limits the Dynamic Type size within the view to the given range. (Polyfill for previous versions)

    Declaration

    Swift

    @available(iOS, introduced: 13.0, deprecated: 100000.0, renamed: "dynamicTypeSize(_:﹚")
    @available(macOS, introduced: 10.15, deprecated: 100000.0, renamed: "dynamicTypeSize(_:﹚")
    @available(tvOS, introduced: 13.0, deprecated: 100000.0, renamed: "dynamicTypeSize(_:﹚")
    @available(watchOS, introduced: 6.0, deprecated: 100000.0, renamed: "dynamicTypeSize(_:﹚")
    func sizeCategory<T>(_ range: T) -> some View where T : RangeExpression, T.Bound == ContentSizeCategory