{"id":2819,"url":"https://github.com/yervandsar/ExpandedTabBar","last_synced_at":"2025-08-03T12:31:24.763Z","repository":{"id":56910194,"uuid":"125183752","full_name":"yervandsar/ExpandedTabBar","owner":"yervandsar","description":"ExpandedTabBar is a very creative designed solution for \"more\" items in UITabBarController. It's greate experience to have more comfortable and intuitive UI.","archived":false,"fork":false,"pushed_at":"2023-01-12T18:22:58.000Z","size":142023,"stargazers_count":308,"open_issues_count":4,"forks_count":20,"subscribers_count":8,"default_branch":"master","last_synced_at":"2024-11-10T16:53:16.484Z","etag":null,"topics":["cocoapods","customui","ios","swift","swiftpackagemanager","tabbar","tabbarcontroller","uitabbarcontroller"],"latest_commit_sha":null,"homepage":"","language":"Swift","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/yervandsar.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-03-14T08:57:53.000Z","updated_at":"2024-07-25T11:11:21.000Z","dependencies_parsed_at":"2023-02-09T13:01:17.283Z","dependency_job_id":null,"html_url":"https://github.com/yervandsar/ExpandedTabBar","commit_stats":null,"previous_names":[],"tags_count":11,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yervandsar%2FExpandedTabBar","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yervandsar%2FExpandedTabBar/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yervandsar%2FExpandedTabBar/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yervandsar%2FExpandedTabBar/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/yervandsar","download_url":"https://codeload.github.com/yervandsar/ExpandedTabBar/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":228543149,"owners_count":17934433,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cocoapods","customui","ios","swift","swiftpackagemanager","tabbar","tabbarcontroller","uitabbarcontroller"],"created_at":"2024-01-05T20:16:23.673Z","updated_at":"2024-12-07T00:31:00.300Z","avatar_url":"https://github.com/yervandsar.png","language":"Swift","funding_links":[],"categories":["UI","Swift"],"sub_categories":["Tab Bar","Other free courses"],"readme":"# ExpandedTabBar v3.0.1\n![Platform](https://img.shields.io/badge/platform-iOS-black.svg) ![Badge w/ Version](https://img.shields.io/cocoapods/v/ExpandedTabBar.svg)  ![Platform](https://img.shields.io/badge/Swift_Package_Manager-compatible-green.svg) \n\n\n**ExpandedTabBar** is a very creative designed solution for \"more\" items in UITabBarController. It's greate experience to have more comfortable and intuitive UI.\n\n![](Resources/demo.gif)\n#\n\n- *[Requirements](#requirements)*\n- *[Installation Guide](#installation)*\n    - *Cocoapods*\n    - *Swift Package Manager*\n- *[Flow Setup](#flow-setup)*\n    - *With Storyboard* \n    - *Programmatically* \n- *[Delegation](#delegation)*\n- *[Customization](#customization)*\n    - *More Tab* \n    - *Light/Dark Mode Support* \n    - *Options Customization* \n- *[Animation Types](#animation-types)*\n- *[Indicator Types](#Indicator-types)*\n- *[Examples](#examples)*\n- *[Support](#support)*\n- *[Let us know!](#let-us-know)*\n- *[License](#license)*\n\n## Requirements\n\n- **iOS 11.0 +**\n- **Swift 5.﹡**\n- **XCode 10 +**\n\n## Installation\n\n**ExpandedTabBar** doesn't contain any external dependencies.\n\n*These are currently the supported intllation options:*\n  \n### [CocoaPods](https://cocoapods.org/)\nTo integrate **ExpandedTabBar** into your Xcode project using CocoaPods, specify it in your `Podfile`:\n```ruby\nuse_frameworks!\n\ntarget '\u003cYour Target Name\u003e' do\n    pod 'ExpandedTabBar'\nend\n```\n### [Swift Package Manager](https://swift.org/package-manager/)\n\nThe  **Swift Package Manager** is a tool for automating the distribution of Swift code and is integrated into the  `swift`  compiler. It is in early development, but appstore-card-transition does support its use on supported platforms.\n\nOnce you have your Swift package set up, adding **ExpandedTabBar** as a dependency is as easy as adding it to the  `dependencies`  value of your  `Package.swift`.\n```swift\ndependencies: [\n    .package(url: \"https://github.com/yervandsar/ExpandedTabBar\", from: \"3.0.1\")\n]\n```\n Or you can checkout [Adding Package Dependencies to Your App](https://developer.apple.com/documentation/xcode/adding_package_dependencies_to_your_app) *by **Apple***\n\n## Flow Setup\n- #### *With Storyboard*\n1.  Create  `UITabBarController`\n2.  Extend from  `ExpandedTabBarController`\n3.  Set to  `UITabBarController`  in storyboard\n\n- #### *Programmatically*\n```swift\nlet viewControllers: [UIViewController] = [...] // Array of view controllers for UITabBarController\nlet expandedTabBar = ExpandedTabBarController()\nexpandedTabBar.setup(viewControllers: viewControllers)\n```\n**NOTE:** any `UIViewController` in `viewControllers` array must have `tabBarItem`.\n\n## Delegation\n\nFor tab selection action implement  `ExpandedTabBarControllerDelegate`:\n```swift\nfunc expandedTabBarController(\n    _ tabBarController: UITabBarController,\n    didSelect viewController: UIViewController,\n    withItem tabBarItem: UITabBarItem?\n)\n```\n\n## Customization\n\n- #### *More Tab*\nYou can customize more tab in storyboard, or set programmatically.\n```swift\nmoreTitle        : String   // Default \"More\"\nmoreIcon         : UIImage? // Default Image from SystemItem.More\nmoreSelectedIcon : UIImage? // Default nil\n```\n- #### *Dark Mode Support*\n**ExpandedTabBar** is fully ***Light/Dark*** mode supported and for setting any `UIColor` or `CGColor` you can use.\n```swift\nlet color: UIColor/CGColor = .pattern(light: UIColor, dark: UIColor)\n```\n**NOTE:** If device OS version does not support dark mode, it will take light as default.\n- #### *Options Customization*\n**ExpandedTabBar** options conforms to **Options** protocol.\n\n```swift\npublic  protocol  Options {\n    var  background   : BackgroundOptions\n    var  container    : ContainerOptions\n    var  animationType: AnimationType\n    var  indicatorType: IndicatorTypes\n}\n```\n#### *Background Options*\n```swift\npublic protocol  BackgroundOptions {\n    var color     : UIColor // Default .clear\n    var alpha     : CGFloat // Default 0.3\n    var closeOnTap: Bool    // Default true\n}\n```\n#### *Container Options*\n```swift\npublic protocol  ContainerOptions {\n    var color         : UIColor             // Default .pattern(light: .white, dark: .black)\n    var alpha         : CGFloat             // Default 1.0\n    var cornerRadius  : CGFloat             // Default 10\n    var roundedCorners: UIRectCorner        // Default .allCorners\n    var bottomMargin  : CGFloat             // Default 15\n    var tabSpace      : CGFloat             // Default 8\n    var tab           : ContainerTabOptions\n    var shadow        : ShadowOptions?      // Default nil\n}\n```\n**NOTE:** For shadow you can see and use `ShadowDefaultOptions` class\n\n#### *Container's Tab Options*\n```swift\npublic protocol  ContainerTabOptions {  \n    var itemHeight     : CGFloat.           // Default 35\n    var titleFont      : UIFont             // Default .systemFont(ofSize: 16)\n    var titleColor     : UIColor            // Default .pattern(light: .black, dark: .white)\n    var iconColor      : UIColor            // Default .pattern(light: .black, dark: .white)\n    var iconContentMode: UIView.ContentMode // Default .scaleAspectFit\n    var iconTitleSpace : CGFloat            // Default 8\n}\n```\n## *Animation Types*\n \n |  NoneAnimations | Translate  | Zoom  |  Rotate |\n :--------------------:|:-----------:|:--------:|:--------:|\n |`.none` |`.top` **Default**|`.zoomIn`|`.rotatePositive`|\n |![](Resources/none.gif)|![](Resources/top.gif)|![](Resources/zoomIn.gif)|![](Resources/rotatePositive.gif)|\n |`.crossDissolve` |`.bottom`|`.zoomOut`|`.rotateNegative`|\n |![](Resources/crossDissolve.gif)|![](Resources/bottom.gif)|![](Resources/zoomOut.gif)|![](Resources/rotateNegative.gif)|\n | |`.left`|`.zoomX`|`.rotate(angle: .pi/6)`|\n | |![](Resources/left.gif)|![](Resources/zoomX.gif)|![](Resources/rotate.gif)|\n |  |`.right`|`.zoomY`| |\n | |![](Resources/right.gif)|![](Resources/zoomY.gif)| |\n \n **NOTE:** You can create your own animation `.custom(AnimationProtocol)`. You can use TransformAnimation for creating custom animations\n\n## *Indicator Types*\n\n| `.none` | `.connectedLine`  |  `.triangle` **Default** |\n:---------:|:-----------------------:|:----------------------------:|\n|![](Resources/none.png)|![](Resources/connectedLine.png)|![](Resources/triangle.png)|\n\n## Examples\n```swift\nfinal class CustomViewController: ExpandedTabBarController {\n\n    override func viewDidLoad() {\n        super.viewDidLoad()\n        expandedDelegate = self\n        expandedTabBarOptions = customOptions\n        \n    }\n    \n    private var customOptions: Options {\n        var options = ExpandedTabBarOptions()\n        \n        options.indicatorType = .connectedLine\n        options.animationType = .custom(customAnimation)\n        \n        options.container.roundedCorners = [.topLeft, .topRight, .bottomLeft]\n        options.container.cornerRadius = 20\n        \n        options.container.shadow = ShadowDefaultOptions()\n        options.container.tabSpace = 15\n        options.container.tab.iconTitleSpace = 15\n        \n        return options\n    }\n    \n    private var customAnimation: AnimationProtocol {\n        let transform = CGAffineTransform(scaleX: 0.1, y: 0.1).rotated(by: .pi)\n        return TransformAnimation(transform: transform)\n    }\n    \n}\n\nextension  CustomViewController: ExpandedTabBarControllerDelegate {\n\n    func expandedTabBarController(_ tabBarController: UITabBarController,\n                                    didSelect viewController: UIViewController,\n                                    withItem tabBarItem: UITabBarItem?) {\n        // Do some logic here\n    }\n}\n```\n\n## Support\n\nFeel free to [open issuses](https://github.com/yervandsar/ExpandedTabBar/issues/new) with any suggestions, bug reports, feature requests, questions.\n\n## Let us know!\n\nWe’d be really happy if you sent us links to your projects where you use our component. Just send an email to yervandsar@gmail.com And do let us know if you have any questions or suggestion regarding the animation.\n\n\n### License\n\nThe MIT License (MIT)\n\nCopyright (c) 2018 Yervand Saribekyan\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyervandsar%2FExpandedTabBar","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fyervandsar%2FExpandedTabBar","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyervandsar%2FExpandedTabBar/lists"}