UINavigationController 底部工具栏在 hideBarsOnTap 之后不保留其状态

Posted

技术标签:

【中文标题】UINavigationController 底部工具栏在 hideBarsOnTap 之后不保留其状态【英文标题】:UINavigationController bottom toolbar does not preserve its state after hideBarsOnTap 【发布时间】:2015-11-02 14:14:14 【问题描述】:

我有一个 UINavigationController,它有一个底部工具栏,我以编程方式设置它的高度,如下所示:

navigationController?.toolbar.frame.size.height += 43.0
navigationController?.toolbar.frame.origin.y -= 43.0
navigationController?.hidesBarsOnTap = true

当我点击我的视图以隐藏栏并再次点击以显示它们时,底部栏返回其默认状态:

栏再次显示后如何保持高度?

非常感谢! :)

【问题讨论】:

有趣的问题,关注。 【参考方案1】:

没有一个很好的方法来做到这一点,但你可以做一些事情,比如在 self.view 上放置一个 tapGestureRecognizer 并计算点击次数。

类似

    var numTaps = 0
    @IBAction func tapOnView(sender: UITapGestureRecognizer) 
        self.numTaps++
        if numTaps%2==0
        
            self.navigationController?.toolbar.frame.size.height += 43.0
            self.navigationController?.toolbar.frame.origin.y -= 43.0
        
    

    func gestureRecognizer(gestureRecognizer: UIGestureRecognizer,
        shouldRecognizeSimultaneouslyWithGestureRecognizer otherGestureRecognizer: UIGestureRecognizer) -> Bool
            return true
    

这有点骇人听闻,但可能会起作用,可能会稍微延迟一下,以确保您在设置工具栏位置后设置高度。

或尝试Is there a way to change the height of a UIToolbar? 提供的答案之一和子类 uitoolbar 以覆盖 sizeThatFits

【讨论】:

这实际上是一个不错的选择.. 但我尽量不做太多“hacky”技巧。如果我只创建自己的工具栏而不考虑 UINavigationController 中的工具栏并响应隐藏导航栏的点击,那不是更好吗? 你比我更了解你的用例。你是在问使用 UINavigationController 的工具栏有什么便利?跨多个 uiviewcontrollers 的相同工具栏,与自动布局、点击隐藏等便利功能以及统一的设计/用户体验(但你似乎不喜欢这个设计,因为你想让它更高)配合得很好。所以要权衡取舍。

以上是关于UINavigationController 底部工具栏在 hideBarsOnTap 之后不保留其状态的主要内容,如果未能解决你的问题,请参考以下文章

UINavigationController 底部工具栏在 hideBarsOnTap 之后不保留其状态

UINavigationController 旋转时在底部留下 12px 的间隙

将 UIView 添加到 UICollectionViewController 的底部

是否可以在没有UINavigationController的情况下将UIToolbar放在UICollectionView下面?

如何使 UINavigationController 中的 UIToolbar 更高?

更改 UINavigationController 中的视图高度