FSPopoverView

master

An iOS customizable view that displays a popover view.
lifution/FSPopoverView

FSPopoverView

Version Status Swift 5.0 license MIT Platform Carthage compatible

中文介绍

A library to present popovers.

Demo

Custom content
List (Light)
List (Dark)
List (Custom item)
List (Horizontal layout)

Support

  • Customization
  • 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

Requirements

  • iOS 11+
  • Swift 5
  • Xcode 14+

Installation

CocoaPods (recommended)

pod 'FSPopoverView'

Carthage

github "lifution/FSPopoverView"

Copy manually

Download or clone the repository, drag the folder FSPopoverView into your project, and tick Copy items if needed and Create groups.

Usage

  • If you need to customize the content, use FSPopoverView, implements the dataSource and return the corresponding content.
let popoverView = FSPopoverView()
popoverView.dataSource = self
popoverView.present(fromBarItem: barItem)

// data source
extension viewController: FSPopoverViewDataSource {
    
    func backgroundView(for popoverView: FSPopoverView) -> UIView? {
        let view = 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 {
        return true
    }
}
  • If you need to display a list, use FSPopoverListView, which provides FSPopoverListTextItem by default. Inherits FSPopoverListItem and FSPopoverListCell if you need to customize the item.
let features: [Feature] = [.copy, .message, .db, .qr, .settings]
let items: [FSPopoverListItem] = features.map { feature in
    let item = FSPopoverListTextItem()
    item.image = feature.image
    item.title = feature.title
    item.isSeparatorHidden = false
    item.selectedHandler = { item in
        guard let item = item as? FSPopoverListTextItem else {
            return
        }
        print(item.title ?? "")
    }
    item.updateLayout()
    return item
}
items.last?.isSeparatorHidden = true
let listView = 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 {
        let appearance = FSPopoverView.fs_appearance()
        appearance.showsArrow = false
        appearance.showsDimBackground = true
        ...
    }
    return true
}
  • For more information on how to use, see the example project under the repository.

License

FSPopoverView is available under the MIT license. See the LICENSE file for more info.

Description

  • Swift Tools
View More Packages from this Author

Dependencies

  • None
Last updated: Mon Dec 09 2024 18:02:28 GMT-1000 (Hawaii-Aleutian Standard Time)