草庐IT

Swift - 在 TabBar 后面展开 ViewController

coder 2023-09-11 原文

我在 UITabBarViewController 中创建了三个 tabItems,它们被推送到另一个 UINavigationController。三个选项卡项之一是 UINavigationController,另外两个是 UIViewController。为了确保只有一个导航栏在作为 UINavigationController 的 tabItem 的非根 viewController 中显示,父 UINavigationBar 将被隐藏。

override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        if let navigationC = self.navigationController, navigationC.viewControllers.count == 1 {
            self.navigationController?.setNavigationBarHidden(true, animated: false)
            self.parent?.navigationController?.setNavigationBarHidden(false, animated: false)
        } else {
            self.navigationController?.setNavigationBarHidden(false, animated: false)
            self.parent?.navigationController?.setNavigationBarHidden(true, animated: false)
        }
        self.setupViewConstraints()
    }

这里的问题是,如果我导航到 UINavigationController 的第二个 UIViewController,然后从 UINavigationController 切换到 UIViewController 并返回到 UINavigationControllerUINavigationController 的底部向上移动,应该与 UIScreen 的底部相等。如果我导航回 UINavigationController 的 Root View ,UINavigationcontroller 的底部等于 UIScreen,这是正确的。

如何确保 navigationController 中的所有 UIViewControllers' 底部都等于 UIScreen?可能是因为 UINavigationController tabItem 的非根 viewController 中有两个 navigationBar。

下面是我用来创建UITabBarViewController的代码:

override func viewDidLoad() {
    super.viewDidLoad()
    tabBar.tintColor = UIColor.fromHexString("0078d7")
    tabBar.barTintColor = UIColor.white

    let firstViewController = FirstViewController()
    firstViewController.delegate = self
    firstViewController.tabBarItem = UITabBarItem.init(title: "first", image: , tag: 0)


    let secondViewController = SecondViewController()
    secondViewController.delegate = self
    secondViewController.tabBarItem = UITabBarItem.init(title: "second", image: , tag: 1)

    let thirdViewController = ThirdViewController()
    thirdViewController.delegate = self
    thirdViewController.tabBarItem = UITabBarItem.init(title: "third", image: , tag: 3)

    let initialNavigationController = UINavigationController(rootViewController: firstViewController)
    initialNavigationController.navigationItem.title =  ""
    self.addChildViewController(initialNavigationController)
    self.addChildViewController(secondViewController)
    self.addChildViewController(thirdViewController)

    self.navigateToLastVisitedViewController(navigationController: initialNavigationController)
}

最佳答案

在上面UITabBarViewControllerviewDidLoad 方法中,只需让您的tabBar 半透明。这将允许您将 viewController 内容放置在 UITabBar 对象下方。

swift

self.tabBar.isTranslucent = true

目标-C

[self.tabBar setTranslucent:YES];

Same logic will be use in UINavigationBar case.

关于Swift - 在 TabBar 后面展开 ViewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49903553/

有关Swift - 在 TabBar 后面展开 ViewController的更多相关文章

  1. vue 实现内容超出两行显示展开更多功能,可依据需求自定义任意行数! - 2

    平时开发中我们经常会遇到这样的需求,在一个不限高度的盒子中会有很多内容,如果全部显示用户体验会非常不好,所以可以先折叠起来,当内容达到一定高度时,显示展开更多按钮,点击即可显示全部内容,先来看看效果图: 这样做用户体验瞬间得到提升,接下来看看具体细节。0">主要操作在内容这里{{item.username}},……展开更多样式大家可依据自己项目需求进行设计,这里就不贴了,主要说几个关键的。1、在data中定义三个属性isShowMore:false, //控制展开更多的显示与隐藏textHeight:null, //框中内容的高度status:false, //内容状态是否打开2.计算内容是否

  2. ruby - 从企业防火墙后面安装 gem - 2

    我怀疑公司防火墙阻止安装gem。我定义了HTTP_PROXY,我可以通过以下命令查看远程gem:jruby-Sgemlist-r但是当我去安装gem时,我得到一个404:jruby-Sgeminstallrails除了维护内部gem存储库之外,是否有解决此问题的良好解决方法? 最佳答案 对于ruby​​gems,将它放在我的gem.bat中这对我有用@"%~dp0ruby.exe""%~dpn0"%*--http-proxyhttp://domainname.ccc.com:8080对于jrubygems这有效@"%~dp0jrub

  3. 防火墙后面的 Mac 上的 Ruby gem 安装问题 - 2

    请为我提供以下问题的解决方案,1)如何在公司防火墙后面的Mac(OSX10.5.1)上安装ruby​​gems。问候,太阳 最佳答案 假设您使用HTTP代理,gem应用程序有一个--http-proxy选项。geminstall--http-proxyhttp://corporate-proxy:1234 关于防火墙后面的Mac上的Rubygem安装问题,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com

  4. ruby-on-rails - 有必要把Unicorn放在Nginx(或Apache)后面吗 - 2

    我对这个架构有点困惑。在我正在进行的一个项目中,Unicorn被选为Rails服务器。它放在Nginx网络服务器后面。据我了解,Unicorn是功能齐全的Web服务器,我们不打算在同一服务器实例上托管任何其他Rails应用程序。所以我的问题是:在链中添加附加层有什么好处:client->nginx->unicorn->unicornworker 最佳答案 Unicorn不是为处理“慢客户端”而设计的。您可以在PHILOSOPHY中阅读更多相关信息帮助文件:Mostbenchmarkswe’veseendon’ttellyouthis

  5. ruby-on-rails - ruby on rails,变量后面或前面的冒号 - 2

    我是ruby​​和rails的新手。我认为Rails是最好的API之一,而ruby​​非常独特,似乎ruby​​可以巧妙地做“假设”来帮助开发人员。但我不太确定扩展到什么程度。我的问题是关于变量中的冒号。到目前为止我所理解的是:variable在ruby中,就是说这个变量将无法改变,这类似于其他语言中的常量。我对么??然后我的困惑是,有时我会看到变量前面的冒号,就像这样Rails.application.config.session_store:cookie_store,key:'_blog_session'key:和method:前面都有冒号,这代表什么?此外Blog::Applic

  6. vue2+element-ui,el-aside侧边栏容器收缩与展开 - 2

    一、概览实现效果如下:二、项目环境1、nodejs版本node-vv16.16.02、npm版本npm-vnpmWARNconfigglobal`--global`,`--local`aredeprecated.Use`--location=global`instead.8.15.03、vue脚手架版本vue-V@vue/cli5.0.8三、创建vue项目1、创建名为vuetest的项目vuecreatevuetest选择Default([Vue2]babel,eslint)  2、切换到项目目录,启动项目cdvuetestnpmrunserve 3、使用浏览器预览 http://localh

  7. ruby - 如何在像 nginx 这样的代理后面时在 rails 日志中记录真实的客户端 ip - 2

    问题我在两台服务器上安装了Rails3.2.15和机架1.4.5。第一个服务器是服务于静态Assets的nginx代理。第二台服务器是为Rails应用程序提供服务的unicorn。在Railsproduction.log中,我总是看到nginxIP地址(10.0.10.150)而不是我的客户端IP地址(10.0.10.62):StartedGET"/"for10.0.10.150at2013-11-2113:51:05+0000我想在日志中有真实的客户端IP。我们的设置HTTPheaderX-Forwarded-For和X-Real-IP在nginx中设置正确,我已经定义了10.0.1

  8. ruby-on-rails - 如何在代理后面使用 bundler ? - 2

    我从sudobundleinstall命令得到以下输出:Fetchingsourceindexfor`http://rubygems.org/`Couldnotreachrubygemsrepository`http://rubygems.org/`Couldnotfindgem'rspec-rails(>=2.0.0.beta.22,runtime)'inanyofthegemsources.我正确设置了$http_proxy并且我添加了gem:--http-proxy=myproxy到~/.gemrc。这些设置使我的gem命令能够工作,我希望它们能转化为bundler,但运气不佳。

  9. ruby - 如何从代理后面更新 Ruby Gems (ISA-NTLM) - 2

    我背后的防火墙正在NTLM-only模式下运行MicrosoftISA服务器。是否有人成功通过RubySSPIgem或其他方法安装/更新他们的Rubygem?...还是我懒惰?注意:rubysspi-1.2.4不工作。这也适用于IronRuby项目的一部分“igem” 最佳答案 对于Windows操作系统,我使用Fiddler解决了这个问题。从www.fiddler2.com安装/运行Fiddler运行gem:$geminstall--http-proxyhttp://localhost:8888$gem_name

  10. javascript - 在 Div 后面画线 - 2

    我正在看这个fiddle:http://jsfiddle.net/kDs2Q/45/有没有办法以某种方式对div/行进行分层,以便该行位于其他div的后面?我希望能够从一个div的中心到另一个div的中心绘制一条线,但看不到该线穿过实际的框。这就是我对中心到中心的看法:varoff1=getOffset(div1);varoff2=getOffset(div2);varx1=off1.left+off1.width/2;vary1=off1.top+off1.height/2;varx2=off2.left+off1.width/2;vary2=off2.top+off1.height

随机推荐