panelkit

by louisdh

louisdh /panelkit

A UI framework that enables panels on iOS.

3.8K Stars 167 Forks Last release: almost 3 years ago (2.0.1) MIT License 357 Commits 7 Releases

Available items

No Items, yet!

The developer of this repository has not created any items for sale yet. Need a bug fixed? Help with integration? A different license? Create a request here:

PanelKit for iOS

Build Status Codecov
Swift PodVersion Carthage Compatible Platform: iOS
Twitter Donate via PayPal

PanelKit for iOS
Applications using PanelKit can be seen in the showcase.

About

PanelKit is a UI framework that enables panels on iOS. A panel can be presented in the following ways:

  • Modally
  • As a popover
  • Floating (drag the panel around)
  • Pinned (either left or right)

This framework does all the heavy lifting for dragging panels, pinning them and even moving/resizing them when a keyboard is shown/dismissed.

Implementing

A lot of effort has gone into making the API simple for a basic implementation, yet very customizable if needed. Since PanelKit is protocol based, you don't need to subclass anything in order to use it. There a two basic principles PanelKit entails:

panels
and a
PanelManager
.

Panels

A panel is created using the

PanelViewController
initializer, which expects a
UIViewController
,
PanelContentDelegate
and
PanelManager
.

PanelContentDelegate

PanelContentDelegate
is a protocol that defines the appearance of a panel. Typically the
PanelContentDelegate
protocol is implemented for each panel on its
UIViewController
.

Example:

class MyPanelContentViewController: UIViewController, PanelContentDelegate {

override func viewDidLoad() {
    super.viewDidLoad()

    self.title = "Panel title"  
}

var preferredPanelContentSize: CGSize {
    return CGSize(width: 320, height: 500)
}   

}

A panel is explicitly (without your action) shown in a

UINavigationController
, but the top bar can be hidden or styled as with any
UINavigationController
.

PanelManager

PanelManager
is a protocol that in its most basic form expects the following:
// The view in which the panels may be dragged around
var panelContentWrapperView: UIView {
    return contentWrapperView
}

// The content view, which will be moved/resized when panels pin var panelContentView: UIView { return contentView }

// An array of PanelViewController objects var panels: [PanelViewController] { return [] }

Typically the

PanelManager
protocol is implemented on a
UIViewController
.

Advanced features

PanelKit has some advanced opt-in features:

Installation

CocoaPods

To install, add the following line to your

Podfile
:
pod 'PanelKit', '~> 2.0'

Carthage

To install, add the following line to your

Cartfile
:
github "louisdh/panelkit" ~> 2.0

Run

carthage update
to build the framework and drag the built
PanelKit.framework
into your Xcode project.

Requirements

  • iOS 10.0+
  • Xcode 9.0+

Todo

Long term:

  • [ ] Top/down pinning

License

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

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.