CalendarView

2.0.0

UICalendarView for SwiftUI
AllanJuenemann/CalendarView

What's New

2024-05-11T23:26:52Z

Warning

This introduces breaking changes to the decorating modifier.

The decorating modifier can now be applied multiple times with different date components and decorations. This replaces the decoration closure with explicit parameters.

Before

CalendarView()
    .decorating(myDates) { components in
        if components.month == specialMonth && components.day == specialDay {
            return .customView {
                Image(systemName: "star.fill")
                    .foregroundStyle(.yellow)
            }
        }

        return .default(color: .green)
    }

Now

CalendarView()
    .decorating(specialDates, systemName: "star.fill", color: .yellow)
    .decorating(otherDates, color: .green)

CalendarView

CalendarView makes UIKit's UICalendarView with all its features available to SwiftUI.

Please note that UICalendarView uses DateComponents rather than Date. CalendarView uses the same convention for consistency but might add support for Date in the future.

Usage

Displaying the calendar

import SwiftUI
import CalendarView

var body: some View {
  CalendarView()
}

Configuring the calendar

CalendarView uses the calendar, time zone and locale from the environment.

CalendarView()
  .environment(\.locale, .init(identifier: "de"))

The font design can be configured by using the fontDesign modifier.

CalendarView()
  .fontDesign(.serif)

You can also set the available date range.

CalendarView(availableDateRange: thisYear)

Updating visible components

You can set and update the current components (year, month) that should be visible in the calendar.

VStack {
  CalendarView(visibleDateComponents: $visibleComponents)
  
  Button("Today") {
    withAnimation {
      visibleComponents = calendar.dateComponents([.year, .month], from: .now)
    }
  }
}

Using decorations

Use the decorating modifier to decorate specific days.

CalendarView()
  .decorating([DateComponents(day: 16)])

Decorations can also be customized.

CalendarView()
  .decorating(specialDates, systemImage: "star.fill", color: .yellow)
  .decorating(otherDates, color: .green, size: .small)

Handling selections

CalendarView supports selections of single and multiple dates.

CalendarView(selection: $selectedDates)

You can also configure which dates are selectable and deselectable.

CalendarView(selection: $selectedDates)
  .selectable { dateComponents in
    dateComponents.day > 15
  }
  .deselectable { dateComponents in
    dateComponents.year == currentYear && dateComponents.month == currentMonth
  }

Description

  • Swift Tools 5.7.0
View More Packages from this Author

Dependencies

  • None
Last updated: Fri May 17 2024 02:46:24 GMT-0900 (Hawaii-Aleutian Daylight Time)