概述
SideMenu 是用 Swift 5 编写的简单易用的侧边菜单容器控制器。
除了 侧菜单 应该具有的所有功能外,它还支持
- 四种不同的状态栏行为(iOS 12 及更早版本)
- 三种不同的菜单位置
- 支持 Storyboard 和编程方式
- 缓存内容视图控制器和懒加载初始化
- 拖动时的回弹效果
- 自定义过渡动画
- 支持自右向左(RTL)
- API 参考
预览
菜单位置/状态栏菜单行为
上方 + 无 | 下方 + 滑动 |
---|---|
![]() |
![]() |
并排 + 淡入 | 并排 + 菜单时隐藏 |
---|---|
![]() |
![]() |
我们称左侧/右侧视图控制器为 菜单 视图控制器,中间视图控制器为 内容 视图控制器。
安装
对于 Swift 5,请使用 2.0.0 或更高版本的版本。
对于 Swift 4.0,请使用 0.5.1 或更早期的版本。对于 Swift 4.2,请使用 1.x 版本。
CocoaPods
要使用 CocoaPods 安装 SideMenu
,请将以下行添加到您的 Podfile
pod 'SideMenuSwift'
# Note it's NOT 'SideMenu'
Carthage
要使用Carthage安装SideMenu
,请在您的Cartfile
中添加以下行
github "kukushi/SideMenu" "master"
用法
Storyboard
要将`SideMenu`设置为Storyboard中的布局
- 打开视图控制器的identity inspector。将其Class更改为
SideMenuController
,Module更改为SideMenuSwift
。 - 在Storyboard中设置菜单视图控制器和初始内容视图控制器。从
SideMenuController
到每个控制器添加一个Custom
segue。- 将菜单segue的identifier改为
SideMenu.Menu
,Class更改为SideMenuSegue
,Module更改为SideMenuSwift
。 - 将内容segue的identifier改为
SideMenu.Content
,Class更改为SideMenuSegue
,Module更改为SideMenuSwift
。
- 将菜单segue的identifier改为
- (可选)如果您想使用自定义segue identifier
- 打开
SideMenuController
的Attribute inspector。 - 在Side Menu Controller部分中,修改Content SegueID/Menu SegueID到所需值并更改相应的segue的identifier。
- 打开
- 完成了。查看这张截图以获得清晰的视图。
通过代码
要通过代码启动带有`SideMenu`的应用
import UIKit
import SideMenuSwift
// If you are using Carthage, uses `import SideMenu`
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
@objc func applicationDidFinishLaunching(_ application: UIApplication) {
let contentViewController = ...
let menuViewController = ...
window = UIWindow(frame: UIScreen.main.bounds)
window?.rootViewController = SideMenuController(contentViewController: contentViewController,
menuViewController: menuViewController)
window?.makeKeyAndVisible()
return true
}
}
使用提供在`UIViewController`扩展中的sideMenuController
方法获取父`SideMenuController
viewController.sideMenuController?.revealMenu()
偏好设置
所有SideMenu的设置都可以在SideMenuController.preferences
中找到。建议查看Example
以了解这些选项如何在应用中产生影响。
SideMenuController.preferences.basic.menuWidth = 240
SideMenuController.preferences.basic.statusBarBehavior = .hideOnMenu
SideMenuController.preferences.basic.position = .below
SideMenuController.preferences.basic.direction = .left
SideMenuController.preferences.basic.enablePanGesture = true
SideMenuController.preferences.basic.supportedOrientations = .portrait
SideMenuController.preferences.basic.shouldRespectLanguageDirection = true
// See a lot more options on `Preferences.swift`.
内容缓存
SideMenu最酷的功能之一就是缓存。
// Cache the view controllers somewhere in your code
sideMenuController?.cache(viewController: secondViewController, with: "second")
sideMenuController?.cache(viewController: thirdViewController, with: "third")
// Switch to it when needed
sideMenuController?.setContentViewController(with: "second")
那么从Storyboard初始化的内容ViewController呢?我们可以使用首选项来为它应用一个默认键!
SideMenuController.preferences.basic.defaultCacheKey = "default"
如果我们不想过早地加载所有内容ViewController怎么办?我们可以使用懒加载缓存
sideMenuController?.cache(viewControllerGenerator: { self.storyboard?.instantiateViewController(withIdentifier: "SecondViewController") }, with: "second")
sideMenuController?.cache(viewControllerGenerator: { self.storyboard?.instantiateViewController(withIdentifier: "ThirdViewController") }, with: "third")
要求
- Xcode 10 或更高版本
- iOS 9.0 或更高版本
许可证
SideMenu采用MIT许可证。有关更多信息,请参阅LICENSE文件。