【问题标题】:Hide custom middle button when navigation push swift 4导航时隐藏自定义中间按钮 swift 4
【发布时间】:2018-12-24 09:01:22
【问题描述】:

我的标签栏中有 3 个栏项目,中间的一个我设置为禁用并用我的中间自定义按钮覆盖它

Swift 3 - How do I create a prominent button on a tab bar (e.g. camera button)

我想在导航推送新屏幕时隐藏底部栏。我尝试了这个,但它不起作用,因为 viewDidDisappear 从未被调用过

override func viewDidDisappear(_ animated: Bool) {
    super.viewDidAppear(animated)
    hidesBottomBarWhenPushed = true
    centerButton.isHidden = true
}

你们能告诉我如何实现吗?

【问题讨论】:

    标签: ios swift uitabbarcontroller swift4 uitabbar


    【解决方案1】:

    看起来你有一个错字。使用 super.viewDidDisappear()

    override func viewDidDisappear(_ animated: Bool) {
        //super.viewDidAppear(animated)
        super.viewDidDisappear(animated)
        hidesBottomBarWhenPushed = true
        centerButton.isHidden = true
    }
    

    【讨论】:

      【解决方案2】:

      您必须为 推送的视图控制器设置该属性。请务必注意,将其设置为 viewDidLoad 为时已晚。您应该在初始化视图控制器实例时设置:

      class PushedVC: UIViewController {
      
          required init?(coder aDecoder: NSCoder) {
              super.init(coder: aDecoder)
              sharedInit()
          }
      
          override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) {
              super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
              sharedInit()
          }
      
          private func sharedInit() {
              hidesBottomBarWhenPushed = true
          }
      
      }
      

      当然,在使用情节提要时,您也可以只检查特定视图控制器的复选标记 Hide Bottom Bar on Push

      为了确保您的中心按钮在这种方法中与标签栏一起隐藏/显示,您必须将其添加为UITabBar 子类中标签栏的子视图。然后覆盖hitTest 使其完全可点击(当然,只有当按钮超出标签栏的框架时才需要这样做):

      class TabBar: UITabBar {
      
          let centerButton = ...
      
          // ...
      
          override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
              if centerButton.frame.contains(point) {
                  return centerButton
              }
      
              return super.hitTest(point, with: event)
          }
      
          // ...
      
      }
      

      【讨论】:

      • Button 我的自定义按钮不是标签栏控制器的一部分。如果我将它添加到 tabbarcontroller 视图,我无法单击按钮的上部,因为它不在 tabbar 视图中。注意我的按钮比tabbar大(一半在tabbar,另一半不在)
      • 在哪里添加按钮?你想隐藏什么?只有按钮?还是包括按钮在内的整个标签栏?
      • 整个栏包括按钮。当导航控制器推送一个新屏幕时,我的标签栏和我的自定义底部应该被隐藏。我的按钮看起来像这样stackoverflow.com/questions/42477440/…
      • 所以使用我的解决方案,栏会正确隐藏,但按钮会保持原位?我理解正确吗?
      • 是的。如果我将按钮添加到标签栏(tabbar.addSubview(button))。然后它可以工作,但我的按钮高于标签栏,我们只能点击部分按钮(在标签栏视图内)。有什么想法而不是使用命中测试?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-07
      • 1970-01-01
      相关资源
      最近更新 更多