- August 12, 2025
- Mins Read
SwiftUIX attempts to fill the gaps of SwiftUI, providing an extensive suite of components, extensions and utilities to complement the standard library. This project is by far the most complete port of missing UIKit/AppKit functionality, striving to deliver it in the most Apple-like fashion possible.
The goal of this project is to complement the SwiftUI standard library, offering hundreds of extensions and views that empower you, the developer, to build applications with the ease promised by the revolution that is SwiftUI.
/// Package.swift
/// …
dependencies: [
.package(url: “https://github.com/SwiftUIX/SwiftUIX.git”, branch: “master”),
]
/// …
https://github.com/SwiftUIX/SwiftUIX
) and click Next.master
).The SwiftUIX documentation can be found at:
https://swiftuix.github.io/SwiftUIX/documentation/swiftuix/
All documentation that hasn’t been migrated here is available via the repository wiki.
While the project itself is stable and heavily being used in production, its documentation is work-in-progress. Contributions are encouraged and welcomed.
UIKit | SwiftUI | SwiftUIX |
---|---|---|
LPLinkView |
– | LinkPresentationView |
UIActivityIndicatorView |
– | ActivityIndicator |
UIActivityViewController |
– | AppActivityView |
UIBlurEffect |
– | BlurEffectView |
UICollectionView |
– | CollectionView |
UIDeviceOrientation |
– | DeviceLayoutOrientation |
UIImagePickerController |
– | ImagePicker |
UIPageViewController |
– | PaginationView |
UIScreen |
– | Screen |
UISearchBar |
– | SearchBar |
UIScrollView |
ScrollView |
CocoaScrollView |
UISwipeGestureRecognizer |
– | SwipeGestureOverlay |
UITableView |
List |
CocoaList |
UITextField |
TextField |
CocoaTextField |
UIModalPresentationStyle |
– | ModalPresentationStyle |
UIViewControllerTransitioningDelegate |
– | UIHostingControllerTransitioningDelegate |
UIVisualEffectView |
– | VisualEffectView |
UIWindow |
– | WindowOverlay |
Activity
ActivityIndicator
ActivityIndicator()
.animated(true)
.style(.large)
AppActivityView – a SwiftUI port for UIActivityViewController.
AppActivityView(activityItems: […])
.excludeActivityTypes([…])
.onCancel { }
.onComplete { result in
foo(result)
}
Appearance
View/visible(_:)
– Sets a view’s visibility.Use CollectionView
within your SwiftUI view, providing it with a data source and a way to build cells.
import SwiftUIX
struct MyCollectionView: View {
let data: [MyModel] // Your data source
var body: some View {
CollectionView(data, id: \.self) { item in
// Build your cell view
Text(item.title)
}
}
}
TryButton
– A button capable of performing throwing functions.flip3D(_:axis:reverse:)
– Flips this view.RectangleCorner
– A corner of a Rectangle.ZeroSizeView
– A zero-size view for when EmptyView
just doesn’t work.Keyboard
– An object representing the keyboard.View/padding(.keyboard)
– Pads this view with the active system height of the keyboard.LinkPresentationView
to display a link preview for a given URL.
LinkPresentationView(url: url)
.frame(height: 192)
View/navigationBarColor(_:)
– Configures the color of the navigation bar for this view.View/navigationBarTranslucent(_:)
– Configures the translucency of the navigation bar for this view.View/navigationBarTransparent(_:)
– Configures the transparency of the navigation bar for this view.View/navigationBarLargeTitle(_:)
– Set a custom view for the navigation bar’s large view mode.PaginationView
PaginationView(axis: .horizontal) {
ForEach(0..<10, id: \.hashValue) { index in
Text(String(index))
}
}
.currentPageIndex($…)
.pageIndicatorAlignment(…)
.pageIndicatorTintColor(…)
.currentPageIndicatorTintColor(…)
View/isScrollEnabled(_:)
– Adds a condition that controls whether users can scroll within this view. Works with:
CocoaList
CocoaScrollView
CollectionView
TextView
Does not work with SwiftUI’s ScrollView
.
SearchBar
– A SwiftUI port for UISearchBar
.
struct ContentView: View {
@State var isEditing: Bool = false
@State var searchText: String = “”
var body: some View {
SearchBar(“Search…”, text: $searchText, isEditing: $isEditing)
.showsCancelButton(isEditing)
.onCancel { print(“Canceled!”) }
}
}
View/navigationSearchBar(_:)
– Sets the navigation search bar for this view.
Text(“Hello, world!”)
.navigationSearchBar {
SearchBar(“Placeholder”, text: $text)
}
View/navigationSearchBarHiddenWhenScrolling(_:)
– Hides the integrated search bar when scrolling any underlying content.
Screen
– A representation of the device’s screen.UserInterfaceIdiom
– A SwiftUI port for UIUserInterfaceIdiom
.UserInterfaceOrientation
– A SwiftUI port for UserInterfaceOrientation
.ScrollIndicatorStyle
– A type that specifies the appearance and interaction of all scroll indicators within a view hierarchy
HiddenScrollViewIndicatorStyle
– A scroll indicator style that hides all scroll view indicators within a view hierarchy.View/statusItem(id:image:
) – Adds a status bar item configured to present a popover when clicked
Text(“Hello, world!”)
.statusItem(id: “foo”, image: .system(.exclamationmark)) {
Text(“Popover!”)
.padding()
}
TextView
TextView(“placeholder text”, text: $text, onEditingChanged: { editing in
print(editing)
})
VisualEffectBlurView
– A blur effect view that expands to fill.
VisualEffectBlurView(blurStyle: .dark)
.edgesIgnoringSafeArea(.all)
View/windowOverlay(isKeyAndVisible:content:)
– Makes a window key and visible when a given condition is true.View/editMenu(isVisible:content:)
– Adds an edit menu to the view.
Text(“Hello, world!”)
.editMenu(isVisible: $isEditMenuVisible) {
EditMenuItem(“Copy”) {
// Perform copy action
}
EditMenuItem(“Paste”) {
// Perform paste action
}
}
Recognize your user's voice elegantly without having to figure out authorization and audio engines. SwiftSpeech Examples Features Installation Getting Started ...
Example To run the example project, clone the repo, and run pod install from the Example directory first. Requirements iOS 14.0 Installation ...
SlidingRuler is a Swift package containing a SwiftUI control that acts like an linear infinite slider or a finite, more precise ...
SkeletonUI aims to bring an elegant, declarative syntax to skeleton loading animations. Get rid of loading screens or spinners and ...