Changelog
July 10, 2026 · View on GitHub
Unreleased
Breaking
- Renamed the "addition" terminology to "indicator" throughout
SwipeMenuViewOptions, matching UIKit's selection-indicator vocabulary. The old names have been removed:TabView.Addition→TabView.Indicator(the.underline/.circle/.nonecases are unchanged)TabView.addition→TabView.indicatorTabView.AdditionView→TabView.IndicatorViewTabView.additionView→TabView.indicatorView
- Renamed three
SwipeMenuViewOptionsproperties to follow Swift API naming conventions. The old spellings have been removed:TabView.needsAdjustItemViewWidth→TabView.adjustsItemViewWidthTabView.needsConvertTextColorRatio→TabView.interpolatesTextColorOnSwipeTabView.AdditionView.isAnimationOnSwipeEnable→TabView.IndicatorView.isAnimationOnSwipeEnabled
Added
SwipeMenuViewOptions.TabView.ItemView.selectedFontto use a different title font while a tab is selected. Defaults to the same 14 pt bold system font asfont, so the title font does not change on selection unless you set it. It affects the selected title's appearance only; in the.flexiblestyle item widths are still measured withfont.SwipeMenuViewOptions.TabView.ItemView.numberOfLinesto let tab titles wrap onto multiple lines (use0for as many lines as the title needs). Defaults to1, preserving the previous single-line behavior. Most useful with the.segmentedstyle, where a long title would otherwise be truncated.SwipeMenuViewOptions.TabView.IndicatorView.Underline.cornerRadiusto round the corners of the underline indicator (set it to half the underline height for a pill shape). Defaults to0, preserving the previous square corners.- SwiftUI support (iOS 18+): a
SwipeMenuview that presents the same tab bar and paging UI driven by a selection binding, configured with the SwiftUI-nativeSwipeMenuOptions, withonWillChangeIndex/onDidChangeIndexclosures mirroring the delegate callbacks. The selection indicator and tab title colors track the swipe continuously, and the.flexibletab bar keeps the selection in view, matching the UIKit behavior. Covered by a new "SwipeMenu in SwiftUI" DocC article and a SwiftUI demo in the example app.
Fixed
- The
.segmentedtab style mispositioned the selection indicator whenindicatorView.paddinghad non-zero horizontal insets: the first tab's indicator spilled off the leading edge, and each later tab drifted increasingly to the left. The indicator now aligns with every tab, inset by the padding, consistent with the other tab styles (issue #25). - The
.flexibletab style computed its scrollable width by subtracting the right safe-area inset instead of adding it, so on devices with a non-zero right inset (for example landscape with the notch on the left) the last tab could not be scrolled fully into view. ContentScrollView.reload()left the previous page views in the view hierarchy while building the new ones, stacking a duplicate set of pages on every call. It now replaces the pages and preserves the current page index.
5.0.0 - 2026-07-05
Breaking
- Distribution is Swift Package Manager only. CocoaPods and Carthage support has been removed (the podspec and the framework Xcode project were deleted).
- The minimum deployment target was raised from iOS 11 to iOS 16.
- Requires the Swift 6.2 toolchain (Xcode 26+); the package now builds in Swift 6 language mode with main-actor default isolation.
- The public delegate and data source protocols are now
@MainActor-isolated and useAnyObjectinstead ofclass. SwipeMenuViewOptionsand its nested types are nowSendable.- Removed the deprecated
SwipeMenuViewOptions.TabView.AdditionView.marginproperty; usepaddinginstead. ContentScrollViewDataSourcenow requiresAnyObjectandContentScrollView.dataSourceis now aweakreference (fixes a retain cycle that leakedSwipeMenuView).
Added
- DocC documentation catalog with Getting Started and Customizing Appearance articles, plus documentation comments across the public API.
- A unit test suite (Swift Testing) that runs on the iOS simulator in CI.
Changed
- Sources were reorganized into the standard Swift package layout (
Sources/SwipeMenuViewController). - The example app was rebuilt as a standalone Xcode project (
Example/Example.xcodeproj) that consumes the library as a local package dependency. - CI now builds the Swift package and the example app and runs the tests on the latest Xcode.
Fixed
- Fixed a crash and broken tab text-color interpolation when tab colors are defined in a non-RGB color space (for example
.white/.black). - Fixed duplicate Auto Layout constraints being added on every layout pass in
SwipeMenuViewController. - Fixed a potential crash in the default data source when
numberOfPages(in:)returns more pages than there are child view controllers. - Fixed tab underline/text-color artifacts when swiping past the first or last tab.
- Fixed
SwipeMenuView.jump(to:animated:)leavingcurrentIndexand the delegate change callbacks out of sync with the content when jumping across more than one page, and made it ignore out-of-range indices (a negative index previously crashed). - Fixed
ContentScrollViewrequesting nonexistent pages from its data source when built with an out-of-range initial index (for examplereloadData(default:)past the last page). - Fixed the views rebuilding themselves when removed from their superview (emitting spurious delegate setup callbacks) and duplicating their tab and content subviews when a
SwipeMenuViewwas removed and re-added to a view hierarchy. - Fixed the tab bar applying safe-area insets even when
isSafeAreaEnabledisfalse, so a safe-area change (rotation, notch) no longer shifts a tab bar that opted out of safe-area layout.
4.1.0 - 2020-03-12
- Added
circleaddition style withcornerRadiusandmaskedCornersoptions. - Added the
isAnimationOnSwipeEnableoption. - Added Swift Package Manager support.
- Fixed incorrect display when
reloadData()is executed while swiping a menu.
4.0.0 - 2019-10-09
- Swift 5.0 / Xcode 11 support.
3.0.0 - 2018-10-04
- Swift 4.2 / Xcode 10 support.
2.0.0 - 2017-10-01
- Swift 4.0 / Xcode 9 support.
1.x - 2017
- Initial releases (Swift 3, Xcode 8/9).