A side menu controller written in Swift for iOS

Overview

SideMenuController

Swift3 Platform Build Status Version Carthage Compatible License

Description

SideMenuController is a custom container view controller written in Swift which will display the main content within a center panel and the secondary content (option menu, navigation menu, etc.) within a side panel when triggered. The side panel can be displayed either on the left or on the right side, under or over the center panel.

SideMenuController SideMenuController
SideMenuController SideMenuController

Contents

  1. Features
  2. Installation
  3. Supported OS & SDK versions
  4. Usage
  5. Caching
  6. Customisation
  7. Implementing custom transitions
  8. Public interface
  9. [Delegation] (#delegation)
  10. License
  11. Contact

## Features

  • Easy to use, fully customisable
  • Left and Right side positioning
  • Over and Under center positioning
  • Automatic orientation change adjustments.
  • Fully customisable transition animations
  • Custom status bar behaviour (see Customisation for details):
SideMenuController SideMenuController
SideMenuController SideMenuController

Installation

CocoaPods

CocoaPods is a dependency manager for Cocoa projects.

CocoaPods 0.36 adds supports for Swift and embedded frameworks. You can install it with the following command:

$ gem install cocoapods

To integrate SideMenuController into your Xcode project using CocoaPods, specify it in your Podfile:

pod 'SideMenuController'

Then, run the following command:

$ pod install

Carthage

Carthage is a decentralized dependency manager that builds your dependencies and provides you with binary frameworks.

You can install Carthage with Homebrew using the following command:

$ brew update
$ brew install carthage

To integrate SideMenuController into your Xcode project using Carthage, specify it in your Cartfile:

github "teodorpatras/SideMenuController"

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

Manually

If you prefer not to use either of the aforementioned dependency managers, you can integrate sources in the Source folder into your project manually.

Supported OS & SDK Versions

  • Supported build target - iOS 8.0+ (Xcode 7+)

Usage

You can get started using SideMenuController in 3 simple steps:

###Step 1 First of all, you should add a menu button image and specify the position of the side panel. Optionally, you can customise other preferences as well. This can be achieved in two ways:

1) If the SideMenuController subclass is the initial view controller in your main storyboard:

Subclass SideMenuController and override init(coder:) where you can change the preferences according to your own style:

class CustomSideMenuController: SideMenuController {

    required init?(coder aDecoder: NSCoder) {
        SideMenuController.preferences.drawing.menuButtonImage = UIImage(named: "menu")
        SideMenuController.preferences.drawing.sidePanelPosition = .overCenterPanelLeft
        SideMenuController.preferences.drawing.sidePanelWidth = 300
        SideMenuController.preferences.drawing.centerPanelShadow = true
        SideMenuController.preferences.animating.statusBarBehaviour = .showUnderlay
        super.init(coder: aDecoder)
    }
}

Next, go to the Storyboard, and change the class of the SideMenuController to the custom subclass you just created.

2) In all other cases:

In AppDelegate.swift, override application:didFinishLaunchingWithOptions::

func func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    // Override point for customization after application launch.

    SideMenuController.preferences.drawing.menuButtonImage = UIImage(named: "menu")
    SideMenuController.preferences.drawing.sidePanelPosition = .overCenterPanelLeft
    SideMenuController.preferences.drawing.sidePanelWidth = 300
    SideMenuController.preferences.drawing.centerPanelShadow = true
    SideMenuController.preferences.animating.statusBarBehaviour = .showUnderlay
}

⚠️ _If you do not specify a menu button image, SideMenuController will not add one by default and you will have to manually add one whenever transitioning to a new center view controller._

###Step 2 SideMenuController can be used with storyboard segues, or you can programmatically transition to a new center view controller.

####Using storyboard segues####

SideMenuController defines two custom segues:

  • SideContainmentSegue - which transitions to a new side controller (triggers embedSideController)
  • CenterContainmentSegue - which transitions to a new center controller (triggers embedCenterController)

In the storyboard file, add initially two segues from the SideMenuController scene, one for the center view controller, and another for the side menu view controller. Later on, you can add more CenterContainmentSeuges depending on how many scenes you want to transition to.

Remember to set all the appropriate attributes of each segue in the Attributes Inspector:

| SideContainmentSegue | CenterContainmentSegue | |----------|:-------------:|------:| | Example | Example |

In order to embed the inital view controlles inside the SideMenuController you will have to call performSegue(withIdentifier:sender:). Easiest way is to subclass SideMenuController and override viewDidLoad:

override func viewDidLoad() {
    super.viewDidLoad()
    performSegue(withIdentifier: "embedInitialCenterController", sender: nil)
    performSegue(withIdentifier: "embedSideController", sender: nil)
}

####Programmatically####

You can perform all the above mentioned transitions programmatically, without using segues, by calling one of the two public methods:

public func embed(sideViewController: UIViewController)
public func embed(centerViewController: UViewController)

Important Note: In case you want the center view controller to be of different type than UINavigationController, you'll have to add the menu button to one/all of its children navigation controllers programmatically. SideMenuController defines an extension to UINavigationController in order to make it easy to do that. Just call navigationController.addSideMenuButton(). Before calling that method, make sure the navigation controller is already embedded inside the SideMenuController's child controller hierarchy.

Example with UITabBarController:

// create the view controllers for center containment
let vc1 = UIViewController()
vc1.view.backgroundColor = UIColor.red
vc1.title = "first"
let nc1 = UINavigationController(rootViewController: vc1)
vc1.navigationItem.title = "first"

let vc2 = UIViewController()
vc2.view.backgroundColor = UIColor.yellow
vc2.title = "second"
let nc2 = UINavigationController(rootViewController: vc2)
vc2.navigationItem.title = "second"

let vc3 = UIViewController()
vc3.view.backgroundColor = UIColor.blue
vc3.title = "third"
let nc3 = UINavigationController(rootViewController: vc3)
vc3.navigationItem.title = "third"

let tabBarController = UITabBarController()
tabBarController.viewControllers = [nc1, nc2, nc3]

// create the side controller
let sideController = UITableViewController()

// embed the side and center controllers
sideMenuViewController.embed(sideViewController: sideController)
sideMenuViewController.embed(centerViewController: tabBarController)

// add the menu button to each view controller embedded in the tab bar controller
[nc1, nc2, nc3].forEach({ controller in
  controller.addSideMenuButton()
})

show(sideMenuViewController, sender: nil)

###Step 3 You're almost set now. Last step is to know how to transition to new center view controllers.

Important Note: SideMenuController defines an extension to UIViewController in order to make it more accessible via the computed property public var sideMenuController: SideMenuController?. From any UIViewController instance, you can access the SideMenuController by typing: self.sideMenuController. This will return the SideMenuController if the caller is one of its child view controllers or otherwise nil.

From here onwards, whenever the user selects an option in the side menu controller, you can easily perform the segue like so:

####Using storyboard segues####

override func tableView(_ tableView: UITableView,
                            didSelectRowAt indexPath: IndexPath)  {
	sideMenuController?.performSegue(withIdentifier: segues[indexPath.row], sender: nil)
}

####Programmatically####

override func tableView(_ tableView: UITableView,
                            didSelectRowAt indexPath: IndexPath)  {
	sideMenuController?.embed(centerViewController: someUIViewControllerInstance)
}

Caching

SideMenuController offers you the possibility to cache center view controllers instead of always instantiating new ones when changing them.

To transition to a new center view controller and cache it, call embed(centerViewController:, cacheIdentifier:) on the SideMenuController.

To retrieve a cached center view controller based on a cache identifier, call viewController(forCacheIdentifier:) on the SideMenuController.

###Example

In your side view controller (a.k.a the menu controller):

override func tableView(_ tableView: UITableView,
                            didSelectRowAt indexPath: IndexPath)  {

    // retrieve your identifier
    let cacheIdentifier = ...
    // retrieve your view controller
    let viewController = ...

    if let controller = sideMenuController?.viewController(forCacheIdentifier: cacheIdentifier) {
        sideMenuController?.embed(centerViewController: controller)
    } else {
        sideMenuController?.embed(centerViewController: UINavigationController(rootViewController: viewController), cacheIdentifier: cacheIdentifier)
    }
}

For a more detailed example, check the Example project.

Customisation

In order to customise the SideMenuController appearance and behaviour, you can play with the SideMenuController .Preferences structure. It is split into three sub structures:

  • Drawing - encapsulates custom attributes specifying how SideMenuController will adjust its layout, positioning on screen.
  • Animating - encapsulates custom attributes specifying which animations will be used for different components.
  • Interaction - encapsulates custom attributes specifying how the user is allowed to interract with the side panel

| Drawing attribute | Description | |----------|-------------|------| | menuButtonImage | In case this attribute is set, SideMenuController will add a button on the left or right side of the navigation bar of the center view controller (in case it is a subclass of UINavigationController) in order to trigger the slide animation. If the attribute is missing, or the center view controller is not a subclass of UINavigationController, you'll have to add the menu button by yourself to all the UINavigationControllers that will be embedded. | | sidePanelPosition | Specifies the positioning of the side panel. This attribute can take one of the four values: .underCenterPanelLeft, .underCenterPanelRight, .overCenterPanelLeft, .overCenterPanelRight | | sidePanelWidth | The width of the side panel. | | centerPanelOverlayColor | When the side panel is either .overCenterPanelLeft or .overCenterPanelRight, an overlay will be shown on top of the center panel when the side is revealed. Pass the preferred color of this overlay. | | centerPanelShadow | When the side panel is either .underCenterPanelRight or .underCenterPanelLeft you can opt in or out to draw a side shadow for the center panel. |

| Animating attribute | Description | |----------|-------------|------| | statusBarBehaviour | The animating style of the status bar when the side panel is revealed. This can be:
+ .slideAnimation: the status bar will be hidden using the UIStatusBarAnimation.slide animation
+ .fadeAnimation: the status bar will be hidden using the UIStatusBarAnimation.fade animation
+ .horizontalPan: the status bar will slide along with the center panel horizontally.
+ .showUnderlay: a layer with the same color as the navigation bar will be displayed under the status bar | | reavealDuration | Reveal animation duration. | | hideDuration | Hide animation duration. | | transitionAnimator | TransitionAnimatable subtype which defines how the new center view controller will be animated on screen. |

Interaction attribute Description Discussion
panningEnabled Default value is true When the side panel is positioned under the center panel, the panning is recognized on the center panel. When the side panel is positoned over the center panel, the panning is recognized on the side panel.
swipingEnabled Default value is true There is no swipe gesture recognizer instantiated when the side panel is positioned under the center panel. When the side panel is positioned over the center panel, the swipe is going to recognized on the center panel.
menuButtonAccessibilityIdentifier Accessibility identifier to be set on the menu button.

Implementing custom transitions

In order to implement custom transition animations for the center view controller, you have to create a struct that conforms to the TransitionAnimatable protocol and implement: static func performTransition(forView view: UIView, completion: () -> Void)

Example:

public struct FadeAnimator: TransitionAnimatable {

    public static func performTransition(forView view: UIView, completion: @escaping () -> Void) {
        CATransaction.begin()
        CATransaction.setCompletionBlock(completion)
        let fadeAnimation = CABasicAnimation(keyPath: "opacity")
        fadeAnimation.duration = 0.35
        fadeAnimation.fromValue = 0
        fadeAnimation.toValue = 1
        fadeAnimation.fillMode = kCAFillModeForwards
        fadeAnimation.isRemovedOnCompletion = true
        view.layer.add(fadeAnimation, forKey: "fade")
        CATransaction.commit()
    }
}

For more examples, check TransitionAnimator.swift.

Public interface

##Public methods##

/**
 Toggles the side pannel visible or not.
*/
public func toggle()

/**
 Returns a view controller for the specified cache identifier

 - parameter identifier: cache identifier

 - returns: Cached UIViewController or nil
*/
public func viewController(forCacheIdentifier identifier: String) -> UIViewController?

/**
 Embeds a new side controller

 - parameter sideViewController: controller to be embedded
*/
public func embed(sideViewController controller: UIViewController)

/**
 Embeds a new center controller.

 - parameter centerViewController: controller to be embedded
 - parameter cacheIdentifier: identifier for the view controllers cache
*/
public func embed(centerViewController controller: UIViewController, cacheIdentifier: String? = nil)

##Public properties##

Property Type Description
preferences SideMenuController.Preferences use to customise the SideMenuController preferences
sidePanelVisible Bool use to check at any time if the side panel is visible or not
centerViewController UIViewController use to access the currently embedded center view controller.
sideViewController UIViewController use to access the currently embedded side view controller.
delegate SideMenuControllerDelegate use to set the delegate to be notified about certain events.

Delegation

SideMenuController defines a delegate protocol which you can use if you want to be announced when the side panel has been revealed or hidden:

public protocol SideMenuControllerDelegate: class {
    func sideMenuControllerDidHide(_ sideMenuController: SideMenuController)
    func sideMenuControllerDidReveal(_ sideMenuController: SideMenuController)
}

In order to receive the aforementioned callbacks, simply assign the delegate property to the SideMenuController instance.

License

SideMenuController is developed by Teodor Patraş and is released under the MIT license. See the LICENSE file for details. Logo graphic created with Logo Maker.

Contact

You can follow or drop me a line on my Twitter account. If you find any issues on the project, you can open a ticket. Pull requests are also welcome.

Comments
  • NavigationBar overlap

    NavigationBar overlap

    I take a tabbar as the centerViewController,This tabbar contains three viewControllers `let vc1 = MicroStationController() vc1.title = "vc1"

        let nc1 = UINavigationController(rootViewController: vc1)
    
        let vc2 = MsgViewController()
        vc2.title = "vc2"
        let nc2 = UINavigationController(rootViewController: vc2)
    
        let vc3 = SearchController()
        vc3.title = "vc3"
        let nc3 = UINavigationController(rootViewController: vc3)
    
        let tabBarController = UITabBarController()
        tabBarController.viewControllers = [nc1, nc2, nc3]
        let nav = UINavigationController(rootViewController: tabBarController)
        self.sideMenuController?.embedSideController(LeftViewController())
        self.sideMenuController?.embedCenterController(nav)`
    

    and then I can't see this three viewController's navigationItems

    opened by Lyansun 14
  • Hiding or Locking SideMenu in some cases?

    Hiding or Locking SideMenu in some cases?

    How can I hide sidemenu or remove after embedded? In some cases, I need to close sidemenu. I couldn't change menu "sidePanelVisible" or embed a sidemenucontroller : nil,

    opened by burcugen 10
  • Push segue from center VC fired from Side menu

    Push segue from center VC fired from Side menu

    So i have a storyboard as follow :

    screen shot 2016-09-26 at 1 28 30 pm

    There is a button in my side menu that will perform a push segue from VC 3 which is the center VC of the sidemenucontroller to a soon-to-be-made VC beside VC 3, so that the nav-bar of the VC "5" will have a back button to navigate back to the center VC. How does one implement this?

    opened by ompagi 7
  • Swiping not working

    Swiping not working

    Seems that only panning works and using:

    SideMenuController.preferences.interaction.panningEnabled = false
    SideMenuController.preferences.interaction.swipingEnabled = true
    

    Doesn't enable swiping only

    opened by mobinzk 6
  • Sidebar layout iPhone X not full to bottom

    Sidebar layout iPhone X not full to bottom

    Hi!

    I was investigating a lay-out issue that the sidemenu view is not displayed fully to the bottom of the application. Might this be misconfiguration or a bug in the framework?

    This is only an issue with iPhone X. Thanks in advance!

    screen shot 2017-11-25 at 11 07 09

    opened by StevenVerheyen 5
  • Update Project to support Swift 2.3

    Update Project to support Swift 2.3

    Fixes #54

    No code changes required. Just update the project files and bumped the pod spec to a new version.

    Let me know if you need any more help or support. Thanks for making this awesome project.

    (I'm not sure how cocoa pods versions work, if this needs a release or what) Thanks again!

    opened by regnerjr 5
  • Example not runable

    Example not runable

    Hello,

    How do you get the example project to work? I've downloaded the zip but it does not build, there is no podfile included so not sure if one needed to be added. Looked like it was all included as source so thought it would just run/build.

    Thanks

    opened by StuartMorris0 5
  • Shadow of center panel not working when opening menu via button

    Shadow of center panel not working when opening menu via button

    Hi there. Great side menu especially the control over the status bar is very nice to have 😃 .

    However, I noticed that if the shadow of the center panel is activated, the shadow only seems to be drawn if the side menu is opened via the pan gesture from the edge of the screen. If the side menu is opened via the menu button, the shadow isn't drawn. I'll attach screenshots of the example project for clarification.

    Shadow drawn when opened with pan gesture screen shot 2016-07-27 at 13 35 41

    Shadow not drawn when opened via menu button screen shot 2016-07-27 at 13 35 32 #17 Also mentions shadow issues but it seems to be another issue.

    opened by ghost 5
  • didSelectRowAtIndexPath Delegate / hide Slide Menu

    didSelectRowAtIndexPath Delegate / hide Slide Menu

    Hello

    Is it possible to create the whole project programmatically (nib files without storyboard)?

    i'm facing a problem with step 4 👍

    override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
        sideMenuController?.embedCenterController(someUIViewControllerInstance)
    }
    
    

    When i select any cell [view controller] more than one time , it's shows the slide menu table quickly and it disappear , why is that ?

    Regards

    opened by rary44 5
  • Placement hamburger button wrong iOS 11

    Placement hamburger button wrong iOS 11

    Hi! After upgrading to Xcode 9 and iOS 11, the hamburger button has been moved slightly to the right. I cannot find a fix for this.

    On the screenshot you can see the hamburger menu with a red background color just to highlight the bounds of it. As you can see, on simulator at the right (which is iOS 11), the hamburger button is a bit more to the right. This has been tested on both real devices and simulators and it occurs on both. So it is not a simulator issue.

    screen shot 2017-10-14 at 13 25 52

    As for the code part, I added this for the SideMenuController. Note; I am using Storyboards:

    import SideMenuController
    
    class  CustomSideMenuController: SideMenuController {
    
        required init?(coder aDecoder: NSCoder) {
            SideMenuController.preferences.drawing.menuButtonImage = UIImage(named: "menu")
            SideMenuController.preferences.drawing.sidePanelPosition = .overCenterPanelLeft
            SideMenuController.preferences.drawing.sidePanelWidth = 300
            SideMenuController.preferences.drawing.centerPanelShadow = true
            SideMenuController.preferences.animating.statusBarBehaviour = .showUnderlay
            SideMenuController.preferences.animating.hideDuration = 0.3
            super.init(coder: aDecoder)
        }
    
        override func viewDidLoad() {
            super.viewDidLoad()
            performSegue(withIdentifier: "showCenterControllerAlgemeen", sender: nil)
            performSegue(withIdentifier: "containSideMenu", sender: nil)
        }
    
    }
    

    Anyone has ideas for this? I also tested this with the example project and there it is also noticeable. Thanks in advance :)

    opened by StevenVerheyen 4
  • embed doesn't me work

    embed doesn't me work

    Hi, I'm trying SideMenuController but not working properly embedded mode.

    When I select an item from the side menu, the new view controller is loaded full screen. Not load embedded in the center. Therefore, the side menu button disappears, but if I slide from left to right, menu appears.

    This is my code in MenuController:

    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { if let index = previousIndex { tableView.deselectRowAtIndexPath(index, animated: true) } let listadoCentrosController:ListadoCentrosController = self.storyboard?.instantiateViewControllerWithIdentifier("centrosVC") as! ListadoCentrosController sideMenuController?.embed(centerViewController: listadoCentrosController, cacheIdentifier: nil) previousIndex = indexPath

    captura de pantalla 2016-09-08 a las 10 59 14

    captura de pantalla 2016-09-08 a las 10 59 21

    captura de pantalla 2016-09-08 a las 10 59 32

    Someone knows I'm doing wrong?

    Thank you very much

    opened by atapias 4
  • Support need for Swift 5

    Support need for Swift 5

    Hi Team, I found you support only Swift 3. When i use XCode 11.2 and change the target to Swift 5, i am getting lots of errors. Kindly let me know do you have any plan on Swift upgrade.

    opened by senthilhisto 1
  • *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'App called -statusBar or -statusBarWindow on UIApplication: this code must be changed as there's no longer a status bar or status bar window. Use the statusBarManager object on the window scene instead.'

    *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'App called -statusBar or -statusBarWindow on UIApplication: this code must be changed as there's no longer a status bar or status bar window. Use the statusBarManager object on the window scene instead.'

    I am facing this crash in Xcode 11 and iOS 13

    *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'App called -statusBar or -statusBarWindow on UIApplication: this code must be changed as there's no longer a status bar or status bar window. Use the statusBarManager object on the window scene instead.'

    Please help me out if anyone can?

    opened by Shahbaz89khan 5
Owner
Teo
✈️ 🌏
Teo
A side menu controller written in Swift for iOS

Description SideMenuController is a custom container view controller written in Swift which will display the main content within a center panel and th

Teo 1.2k Dec 29, 2022
A simple side menu for iOS written in Swift.

ENSwiftSideMenu A lightweight flyover side menu component for iOS with the UIDynamic's bouncing animation, UIGestures and UIBlurEffect. Allows you to

Evgeny Nazarov 1.8k Dec 21, 2022
iOS Interactive Side Menu written in Swift.

Interactive Side Menu A customizable, interactive, auto expanding and collapsing side menu for iOS written in Swift. Here are some of the ways Interac

Handsome 706 Dec 15, 2022
Beautiful iOS side menu library with parallax effect. Written in Swift

AKSideMenu AKSideMenu is a double side menu library with parallax effect. Example Project See the contained examples to get a sample of how AKSideMenu

Diogo Autilio 280 Dec 6, 2022
A simple customizable side menu written in SwiftUI.

NSideMenu Description A simple customizable side menu written in SwiftUI. Give a Star! ⭐ Feel free to request an issue on github if you find bugs or r

null 5 Oct 10, 2022
Simple side/slide menu control for iOS, no code necessary! Lots of customization. Add it to your project in 5 minutes or less.

▤ SideMenu If you like SideMenu, give it a ★ at the top right of this page. SideMenu needs your help! If you're a skilled iOS developer and want to he

Jon Kent 5.4k Dec 29, 2022
iOS 7/8 style side menu with parallax effect.

RESideMenu iOS 7/8 style side menu with parallax effect inspired by Dribbble shots (first and second). Since version 4.0 you can add menu view control

Roman Efimov 7.2k Dec 28, 2022
Library provides easy to implement variation of Android (Material Design) Floating Action Button for iOS. You can use it as your app small side menu. 🌶

RHSideButtons ?? Library provides easy to implement variation of Android (Material Design) Floating Action Button for iOS. You can use it as your app

Robert Herdzik 166 Nov 14, 2022
Animated side menu with customizable UI

Side Menu Animated side menu with customizable UI. Made in Yalantis. Check this project on dribbble. Check this project on Behance. Requirements iOS 7

Yalantis 2.7k Dec 27, 2022
Simple side option menu with clean code princibles

SwiftUISideMenu Simple side option menu with clean code princibles.

Mehmet Karanlık 12 May 23, 2022
iOS Slide Menu Controller. It is written in pure swift.

SlideMenuController Requirements iOS 9+ Installation SlideMenuController is available through CocoaPods. To install it, simply add the following line

Myung gi son 40 Jan 16, 2022
Menu controller with expandable item groups, custom position and appearance animation written with Swift. Similar to ActionSheet style of UIAlertController.

Easy to implement controller with expanding menu items. Design is very similar to iOS native ActionSheet presentation style of a UIAlertController. As

Anatoliy Voropay 22 Dec 27, 2022
A Slide Menu, written in Swift, inspired by Slide Menu Material Design

Swift-Slide-Menu (Material Design Inspired) A Slide Menu, written in Swift 2, inspired by Navigation Drawer on Material Design (inspired by Google Mat

Boisney Philippe 90 Oct 17, 2020
Swift-sidebar-menu-example - Create amazing sidebar menu with animation using swift

 SWIFT SIDEBAR MENU EXAMPLE In this project I create a awesome side bar menu fo

Paolo Prodossimo Lopes 4 Jul 25, 2022
A paging menu controller built from other view controllers placed inside a scroll view (like Spotify, Windows Phone, Instagram)

Unfortunately, life gets in the way sometimes and I won't be able to maintain this library any longer and upgrade this library to where it needs to be

null 5.2k Dec 31, 2022
A paging view controller with a highly customizable menu ✨

Getting Started | Customization | Installation Features Parchment lets you page between view controllers while showing any type of generic indicator t

Martin Rechsteiner 3k Jan 8, 2023
Slide-Menu - A Simple Slide Menu With Swift

Slide Menu!! Весь интерфейс создан через код

Kirill 0 Jan 8, 2022
EasyMenu - SwiftUI Menu but not only button (similar to the native Menu)

EasyMenu SwiftUI Menu but not only button (similar to the native Menu) You can c

null 10 Oct 7, 2022
Hamburger Menu Button - A hamburger menu button with full customization

Hamburger Menu Button A hamburger menu button with full customization. Inspired by VinhLe's idea on the Dribble How to use it You can config the looks

Toan Nguyen 114 Jun 12, 2022