我是iOS开发的新手,并尝试使用Pages实现Twitter iOS导航栏。
我遇到了这个:https://github.com/aubrey/SwiftPagingNav/tree/master/SwiftPagingNav
当我加载它时,它工作得很好,但是在用户成功登录后我需要到达那个UIViewController。
所以,我从AppDelegate中取出代码并将其放入我自己的PagingNavController viewDidLoad()
函数中。但是,当我删除window.makeKeyAndBackground()
时,导航栏没有显示,当我确实包含它时,我得到一个不平衡的调用开始/结束外观错误。
此外,我不知道在AppDelegate之外弄乱窗口是否是好习惯。
我如何将代码划分为PagingNavController?
修改
我想要完成的是拥有2个页面,您可以像Twitter一样浏览。这两个页面都应该有自己的ViewControllers来容纳TableViews。
我成功管理了
将上面链接中显示的3个滚动视图中的第二个更改为我的一个ViewControllers:
我使用的代码是:
let viewController = storyboard?.instantiateViewControllerWithIdentifier("myViewController") as? ViewController
view2 = viewController?.view
view2.backgroundColor = UIColor(red:0.231, green:0.529, blue:0.757, alpha: 1)
view2.frame = CGRectMake(wBounds, 0, wBounds, hBounds)
self.scrollView.addSubview(view2)
self.scrollView.bringSubviewToFront(view2)
但是,当我按下ViewController中的按钮时,我注意到我得到EXC_BAD_ACCESS
。
我猜测使用ScrollViews可能不是实现我想要的最好方法吗?
更新:我设法修复了上面编辑中的错误,但我仍然无法以编程方式生成导航栏。仅适用于AppDelegate代码,但我不明白为什么。
BIG UPDATE:基本上我设法得到了我喜欢的功能!
在viewDidLoad中,我执行以下操作:
var navBar: UINavigationBar = UINavigationBar(frame: CGRectMake(0, 0, self.view.bounds.width, 64))
// Lots of code from above link. Make sure to delete
// self.navigationController?.navigationBar.addSubview(navbarView)
navBar.addSubview(navbarView)
self.view.addSubview(navBar)
然后,将viewDidLayoutSubviews更改为:
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
navbarView.frame = CGRect(x: 0, y: 20, width: self.view.bounds.width, height: 64)
}
基本上,我创建了自己的导航栏,然后根据iOS规范定位它。
我唯一的问题(出于某种原因)是标题都聚集在一起,直到用户第一次开始滚动。这应该是一个简单的解决方案。
答案 0 :(得分:0)
您还需要将viewController添加为" child"查看PagingNavController的控制器
尝试在bringSubviewToFront调用
之后添加以下行addChildViewController(viewController!)
viewController?.didMoveToParentViewController(self)
有关详细信息,请参阅以下行: http://www.objc.io/issue-1/containment-view-controller.html
侧节点:您应该使viewController非可选。它目前是可选的,因为您使用的是as?
,但由于您确定它不会为零,因此您可以使用as
(不使用?
)。然后你可以删除?而且!在对viewController的任何引用之后