gpt4 book ai didi

ios - 从 UIViewController 推送 UINavigationController

转载 作者:搜寻专家 更新时间:2023-11-01 07:05:05 25 4
gpt4 key购买 nike

我会以与收藏夹/书签文件夹在 iOS Safari 中相同的方式推送 UINavigationController:

Safari Push Animation

我已经尝试使用单个 UINavigationController,在 viewWillAppear 中设置 navigationController?.setNavigationBarHidden(true, animated: false) 作为第一个 View ,但我无法获取期望的行为:我会让导航栏在推送子 viewController 时滑入,并在返回 rootViewController 时滑出。

有什么建议吗?我正在使用 Swift 4.0.3,开发目标 iOS 11,在此先感谢。

编辑

我试图通过嵌套两个 UINavigationController 来实现所需的行为:

mainNavController: UINavigationController           // with hidden NavigationBar
- firstFavoritePage: UIViewController // as rootViewController
- wrapper: UIViewController // a containerViewController
- nestedNavController: UINavigationController
- blankPageWithTitleAll: UIViewController // as rootViewController
- folderPage: UIViewController

我添加了一个包装器容器 ViewController,因为两个 UINavigationController 在直接嵌套时被合并(让 UISplitViewController 按预期工作),我在内部 NavigationController 中添加了一个空白页面,标题为“All”以获取“

在 Swift 中:

let wrapper = UIViewController()
let blankPageWithTitleAll = UIViewController()
let folderPage = UIViewController()
let nestedNavController = UINavigationController(rootViewController: blankPageWithTitleAll
wrapper.addChildViewController(nestedNavController)
wrapper.view.addSubview(nestedNavController.view)
nestedNavController.view.anchorToSuperview(wrapper.view)
nestedNavController.didMove(toParentViewController: wrapper)
nestedNavController.pushViewController(folderPage, animated: false)
blankPageWithTitleAll.navigationItem.title = "All"
firstFavoritePage.show(wrapper, sender: self)

现在呈现动画按预期工作,但要关闭所有内容,如果事件 ViewController 是 nestedNavController 导航堆栈的第二个或第一个 Controller ,我应该:

  • 防止 nestedNavController 交互式弹出转换;
  • 防止 nestedNavController 后退按钮弹出过渡;
  • 添加自定义操作,当按下“
  • [可能是最难做的事] 将 nestedNavController 的 pop UIPercentDrivenInteractiveTransition(边缘滑动以返回交互式动画)镜像到 mainNavController。

我什至不知道我是否可以为该动画过渡获取或设置百分比值(我认为这不可能..但我会尝试弄清楚是否可行)。

非常感谢任何其他方式(可能更简单)使它正常工作,谢谢。

最佳答案

您可以使用嵌入式 View Controller 来归档此类行为。在图像中查看我的 View 层次结构:enter image description here您可以将导航 Controller 嵌入为 subview 。

在上一个 View 中,您必须创建导航栏之类的 View ,并且必须为弹出 View Controller 编写代码。

代码如下:

class ViewController: UIViewController {

override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}

class MainViewController: UIViewController {

override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}

class SubViewController: UIViewController {

override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
self.navigationController?.interactivePopGestureRecognizer?.delegate = nil
}
@IBAction func onClickBack(_ sender: UIButton) {
self.navigationController?.popViewController(animated: true)

}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}

实际结果:

关于ios - 从 UIViewController 推送 UINavigationController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48552846/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com