我有一个完全用代码编写的应用程序,所以没有故事板,它将AppDelegate中的rootViewController设置为TabBarController。这是UITabBarController的自定义类,用于设置所有视图,在其中添加相应的ViewController,并为每个ViewController设置一个NavigationController。
// didFinishLaunchingWithOptions
window = UIWindow(frame: UIScreen.main.bounds)
window?.makeKeyAndVisible()
let MainScreen = TabBarController()
self.window?.rootViewController = MainScreen
现在,这一切正常,但是我想从左侧添加一个滑出菜单以显示几个设置。我想要左侧主屏幕上(NavigationController内部)的按钮,当我单击它时,我希望菜单滑入,将当前的ViewController相应地推向右侧。一个很好的例子是,当您单击Twitter提要的左上方的个人头像时。
我考虑了几种实现此目的的方法,在网上阅读了很多,并看到了一些示例,这些示例经常使用第三方插件或情节提要,这是我所不希望的。其他示例似乎可以使用,但不能使用TabBarController。
我想使用UIScrollView来实现此目的,方法是将contentSize设置为UIScreen宽度的1.5倍,打开应用时将其启动为屏幕宽度的一半的x值,从而显示ViewController,然后点击按钮x -value更改为0以显示菜单。那是计划。但是,我似乎无法将TabBarController(不是UIView而是UITabBarController)添加到我的SlideController(带有UIScrollViewDelegate的自定义UIViewController)中。有什么建议可以实施吗?到目前为止,这是我的SlideController,它将成为我的RootViewController:
import UIKit
class SlideController: UIViewController, UIScrollViewDelegate {
override func viewDidLoad() {
view.addSubview(scrollableView)
scrollableView.delegate = self
}
func scrollViewDidScroll(_ scrollView: UIScrollView) {
print("scroll to: x ", scrollView.contentOffset.x, " y ", scrollView.contentOffset.y)
}
var scrollableView: UIScrollView = {
let scrollableView = UIScrollView()
let scrollableWidth = UIScreen.main.bounds.width + (UIScreen.main.bounds.width * 0.5)
scrollableView.frame = CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height)
scrollableView.contentSize = CGSize(width: scrollableWidth, height: UIScreen.main.bounds.height)
scrollableView.backgroundColor = .white
scrollableView.showsHorizontalScrollIndicator = true
scrollableView.showsVerticalScrollIndicator = true
scrollableView.alwaysBounceHorizontal = true
scrollableView.alwaysBounceVertical = true
return scrollableView
}()
}
基本上,我想问的是:如何将作为当前rootViewController的UITabBarController添加到UIScrollView?其次,这是一个好主意还是有其他更好的解决方案?开放所有建议和想法。
干杯!