测试已测试 | ✗ |
语言语言 | SwiftSwift |
许可 | Apache 2 |
发布最后一次发布 | 2018年2月 |
SwiftSwift版本 | 3.0 |
SPM支持SPM | ✗ |
由Andrey Arzhannikov、Olga Konoreva、Eric Miller维护。
Swift编写的iOS交互式侧边菜单。
它支持以下自定义
所有这些参数都可以根据不同的方向进行变化。
更多详细信息请参阅CONTRIBUTING文件。
要实现您的侧边菜单,您应该创建基本视图控制器的基本子类。
MenuContainerViewController
是菜单和内容视图的主机MenuViewController
是菜单视图的容器同时,确保每个菜单项视图控制器都采用相应的协议。
SideMenuItemContent
是对应菜单项的数据视图控制器协议要设置您的侧边菜单,您需要做三件事
MenuViewController
的基本实现并将它分配给menuViewController
属性contentViewControllers
属性selectContentViewController(_ selectedContentVC: MenuItemContentViewController)
选择初始内容控制器import InteractiveSideMenu
class HostViewController: MenuContainerViewController {
override func viewDidLoad() {
super.viewDidLoad()
menuViewController = self.storyboard!.instantiateViewController(withIdentifier: "NavigationMenu") as! MenuViewController
contentViewControllers = contentControllers()
selectContentViewController(contentViewControllers.first!)
}
private func contentControllers() -> [MenuItemContentViewController] {
var contentList = [MenuItemContentViewController]()
contentList.append(self.storyboard?.instantiateViewController(withIdentifier: "First") as! MenuItemContentViewController)
contentList.append(self.storyboard?.instantiateViewController(withIdentifier: "Second") as! MenuItemContentViewController)
return contentList
}
}
要显示菜单,从SideMenuItemContent
协议中调用showSideMenu()
方法。
import InteractiveSideMenu
class KittyViewController: UIViewController, SideMenuItemContent {
@IBAction func openMenu(_ sender: UIButton) {
showSideMenu()
}
}
要更改内容视图,选择所需的内容控制器并隐藏菜单。
let index = 2 // Second menu item
guard let menuContainerViewController = self.menuContainerViewController else { return }
let contentController = menuContainerViewController.contentViewControllers[index]
menuContainerViewController.selectContentViewController(contentController)
menuContainerViewController.hideSideMenu()
要使用标签栏或导航控制器使用菜单,确保你将UITabBarController或UINavigationController直接标识为项内容,而不是任何相应的视图控制器。
class NavigationViewController: UINavigationController, SideMenuItemContent {
}
class InnerViewController: UIViewController {
@IBAction func openMenu(_ sender: Any) {
if let navigationViewController = self.navigationController as? SideMenuItemContent {
navigationViewController.showSideMenu()
}
}
}
请参阅Sample中的UITabBarController实现细节。
要自定义菜单打开或关闭的动画,更新transitionOptions
属性,该属性在MenuContainerViewColtroller
类中可用。初始设置可以在控制器的viewDidLoad()
中完成。
override func viewDidLoad() {
super.viewDidLoad()
let screenSize: CGRect = UIScreen.main.bounds
self.transitionOptions = TransitionOptions(duration: 0.4, visibleContentWidth: screenSize.width / 6)
...
}
此外,您还可以更新自定义设置,例如设置横屏幕方向的其他选项。为此,请重写viewWillTransition(to:with:)
方法,并将所需参数添加到transitionOptions
属性。
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
super.viewWillTransition(to: size, with: coordinator)
var options = TransitionOptions()
options.duration = size.width < size.height ? 0.4 : 0.6
options.visibleContentWidth = size.width / 6
self.transitionOptions = options
}
过渡选项还可以用于设置紧凑和常规尺寸的不同参数。实现ViewController的traitCollectionDidChange(_: )
方法以添加这些设置。
请参考示例以了解实现细节,并查看变更日志了解如何从v1.0更新到v2.0的更多信息。
存在一个与iOS 11中NavigationBar缩放相关的问题。问题在于当contentScale < 1
时,关闭侧菜单期间状态栏背景被隐藏。这被认为是iOS 11 NavigationBar的问题,已报告给Apple。
InteractiveSideMenu遵循Apache License,Version 2.0。有关更多信息,请参阅许可证文件。