SystemImagePicker
SystemImagePicker copied to clipboard
A SF Symbols picker written in SwiftUI.
SystemImagePicker
SystemImagePicker is a SwiftUI View providing a cross-platform and highly customizable Picker-like component for selecting SF Symbols.
Installation
Swift Package Manager (Xcode 11 and above)
- Select
File/Swift Packages/Add Package Dependency…from the menu. - Paste
https://github.com/sbertix/SystemImagePicker.git. - Follow the steps.
Usage
The easiest way to present the Picker is through the provided View extension methods.
struct SomeView: View {
@State private var isPresentingSymbols: Bool = false
@State private var symbol: String?
var body: some View {
Button("Choose a SF Symbol") {
isPresentingSymbols = true
}.systemImagePicker(
isPresented: $isPresentingSymbols,
selection: $symbol
)
}
}
But you can also initialize SystemImagePicker directly.
Features
SystemImagePicker supports the widest variety of features of any SF Symbols picker.
- [x] Sectioned and un-sectioned SF Symbols
- [x] Defaults for both sectioned and un-sectioned pickers
- [x] Filter or pass your own subset of SF Symbols to pick from
- [x] Support both precise and human readable search (e.g.
"circle.fill"returns only circle.fill, but"circle fill"or"fill circle"returns all SF Symbols having a combination of both words) - [x] Dismiss automatically on selection or wait for user input with
.systemImagePickerDismissOnSelection(false) - [x] Allow for no selection using
Optionals - [x] Pixel-perfect padding using fully dynamic cell sizing
- [x]
IdentifiableandRawRepresentablesupport in place ofStringSF Symbol name if you wanna be extra safe or you're using another library abstraction - [x] Bring your own style or branding with
SystemImagePickerStyleconformance - [x] Support for SF Symbols 5 and visionOS
And much more!
Appearance
| Light mode | Dark mode | |
|---|---|---|
![]() |
![]() |
iOS default appearance with custom subset. |
![]() |
![]() |
iOS unsectioned default appearance with confirmation required on dismiss and optional selection. |
![]() |
![]() |
macOS default appearance with filled-only subset. (The modal sheet was scaled up for visibility in the README alone) |
Status
You can find all changelogs directly under every release.
Milestones, issues, are the best way to keep updated with active developement. Feel free to contribute by sending a pull request. Just remember to refer to our guidelines and Code of Conduct beforehand.





