ios – 使用UINavigationController为Pros定制UIToolbar

几个星期以来,我一直在搜索资源并搜索关于在基于UINavigationController的应用程序中自定义大小的UIToolbar工作的非kiddo开发建议.通过“工作”我的意思是一种非hackish方法,允许关键的事情,如优雅的隐藏/显示工具栏,滑动隐藏,和其他优雅的动画.

在UINavigationController实例中创建一个自定义UIToolbar类实例,该实例覆盖sizeThatFits:按预期更改大小,但结果会出现几个不可接受的问题.

所以,在这里我们有共同的尺寸:多个人提供的替代品:

    - (CGSize) sizeThatFits:(CGSize)inSize {
        CGSize sz = [super sizeThatFits:inSize];
        sz.height = SS_TOOLBAR_HEIGHT;
        return sz;
    }

好吧,很棒,尺寸会发生变化,但是如果你在这个功能上设置了断点,很明显其他东西仍在为那个44磅的高度敲打.尝试在那里设置断点并查看它被调用的频率 – 看起来很腥(这将在以后发挥作用).

好吧,很好,它会根据我们的喜好改变高度,所以我们继续添加功能,以便工具栏在触摸或滑动时隐藏(带动画).好吧,如果我们启用UINavigationController的hidesBarsOnSwipe,那么就有两个问题:导航栏被绑定到隐藏(yuck),并且工具栏被完全隐藏,因此将其恢复完全是非WYSIWYG.我们的设计目标是使工具栏像抽屉一样在适当的滑动方向上滑入/滑出,独立于导航栏.进一步而不是完全隐藏工具栏,我们希望有一个lil存根/标签可能高10-20分,这表明用户可以将工具栏向上滑回,就像抽屉回到正常状态一样.

所以要做到这一点,我们改变sizeThatFits:在我们的UIToolbar派生类中:

- (CGSize) sizeThatFits:(CGSize)inSize {
    CGSize sz = [super sizeThatFits:inSize];
    sz.height = _minimized ? SS_TOOLBAR_HEIGHT_MINIMIZED : SS_TOOLBAR_HEIGHT;
    return sz;
}

在最小化状态变化时,我们自然会隐藏/显示相应的子视图,以便它可以正常显示,或者说,例如,15点高,带有一点小小的图形小调.因此,这种方法的主要问题是,现在任何尝试工具栏动画将其滑入/滑出都可以完全恢复,这要归功于sizeThatFits:在动画期间调用它并使其短路.好的Apple,好吧,让我们试着在其他地方设置目的地大小:

- (CGSize) sizeThatFits:(CGSize)inSize {
    CGSize sz = [super sizeThatFits:inSize];
    if ( _animationInProgress ) {
        sz.height = _minimized ? SS_TOOLBAR_HEIGHT_MINIMIZED : SS_TOOLBAR_HEIGHT;
    }
    return sz;
}

好吧,事情就是在这一刻滚雪球般的疯狂.调用sizeThatFits:大量尝试抽屉般的隐藏/显示动画看起来更加破碎,因为44磅幽灵大小胜出,将所有东西都淹没了.

所以,简而言之,我正在寻找一个专业开发人员来分享有关如何继续使用UINavigationController但有一个工具栏具有良好表现的动画抽屉式行为的信息/建议.此时我几乎可以解决任何问题,只是“最小化”状态对WYSIWYG友好,因此用户可以恢复工具栏.也许一种方法是制作一个位于底部的微小浮动UIView,仅在隐藏工具栏时显示(当触摸或滑动时,工具栏将被取消隐藏,动画将变得流畅).我如何以及在哪里坚持这种“浮动”的观点?

我想是什么让我了解所有这些以及为什么我觉得我在愤怒中发帖帮助这里讨论的所需工具栏功能似乎是大多数iOS开发人员绝对欢迎的功能,并且会看到UINavigationController的一个重大改进UIToolbar当前的限制.

我在iOS上有很好的经验,但我是OS X并赢得了maaaany卫星的培训,因此非常感谢来自其他专业开发人员的帮助.

提前致谢!

最佳答案 尝试覆盖-intrinsicContentSize.

点赞