A library to present popovers.
Custom content | List (Light) | List (Dark) | List (Custom item) |
|---|---|---|---|
| List (Horizontal layout) | |||
- Custom content
- Arrow direction
- Hidden Arrow
- Custom border
- Custom shadow
- Custom transition animation
- Custom list item
- Dark mode (iOS13+)
- Global appearance
- Arrow direction priority
- List appends/removes item
- Compatible with screen rotation
- iOS 12+
- Swift 5
- Xcode 15+
CocoaPods (recommended)
pod'FSPopoverView'github "lifution/FSPopoverView"The Swift Package Manager is a tool for automating the distribution of Swift code and is integrated into the swift compiler.
Once you have your Swift package set up, adding FSPopoverView as a dependency is as easy as adding it to the dependencies value of your Package.swift or the Package list in Xcode.
dependencies:[.package(url:"https://github.com/lifution/FSPopoverView.git")]Download or clone the repository, drag the folder Source into your project, and tick Copy items if needed and Create groups.
- If you need to customize the content, use FSPopoverView, implements the dataSource and return the contents.
letpopoverView=FSPopoverView()
popoverView.dataSource =self
popoverView.present(fromBarItem: barItem)
// data source
extensionviewController:FSPopoverViewDataSource{func backgroundView(for popoverView:FSPopoverView)->UIView?{letview=UIView()
view.backgroundColor =.yellow
return view
}func contentView(for popoverView:FSPopoverView)->UIView?{return contentView
}func contentSize(for popoverView:FSPopoverView)->CGSize{return.init(width:100.0, height:100.0)}func containerSafeAreaInsets(for popoverView:FSPopoverView)->UIEdgeInsets{return view.safeAreaInsets
}func popoverViewShouldDismissOnTapOutside(_ popoverView:FSPopoverView)->Bool{returntrue}}- If you need to display a list, use
FSPopoverListView, which providesFSPopoverListTextItemby default.FSPopoverListViewis data-driven. InheritsFSPopoverListItemandFSPopoverListCellif you need to customize the item.
letfeatures:[Feature]=[.copy,.message,.db,.qr,.settings]letitems:[FSPopoverListItem]= features.map{ feature inletitem=FSPopoverListTextItem()
item.image = feature.image
item.title = feature.title
item.isSeparatorHidden =false
item.selectedHandler ={ item inguardlet item = item as?FSPopoverListTextItemelse{return}print(item.title ??"")}
item.updateLayout()return item
}
items.last?.isSeparatorHidden =trueletlistView=FSPopoverListView()
listView.items = items
listView.present(fromRect: sender.frame.insetBy(dx:0.0, dy:-6.0), in: view)- Use
FSPopoverView.fs_appearance()to customize default values for popover view.
func application(_ application:UIApplication, didFinishLaunchingWithOptions launchOptions:[UIApplication.LaunchOptionsKey:Any]?=nil)->Bool{do{letappearance=FSPopoverView.fs_appearance()
appearance.showsArrow =false
appearance.showsDimBackground =true...}returntrue}- For more information on how to use, see the example project under the repository.
FSPopoverView is available under the MIT license. See the LICENSE file for more info.