【问题标题】:Imitate iOS 7 Safari Nav-Bar模仿 iOS 7 Safari 导航栏
【发布时间】:2013-10-28 06:05:40
【问题描述】:

在 iOS7 中,Safari 中的导航栏在滚动时会自动缩小。 Facebook 中的导航栏也是如此,甚至到了完全消失的地步。

您将如何自己实现此行为? 我猜您还必须动态调整 contentOffset 并且我猜这也会与默认的刷新控件发生冲突,不是吗?

【问题讨论】:

  • 在 Apple 内部论坛上提问,这可能是获得答案的更好地方。如果您得到它,请回答您自己的问题,因为其他人肯定会感兴趣。
  • 另外,看看这个答案 - 如何动画栏打开和关闭:stackoverflow.com/a/2079655/1633251
  • @DavidH 不幸的是这对我没有帮助。我不想一次隐藏导航栏,我希望它在人们滚动时改变,这取决于他们滚动了多少。
  • 对。因此,使用手势识别器和监视滚动视图委托消息,您可以在不同时间打开和关闭它。您必须自己编写该代码。

标签: ios facebook safari


【解决方案1】:

这不是正确的做法,但它对我有用。我在UINavigationBar 上创建了类别并覆盖了sizeThatFits:,如下所示:

- (CGSize)sizeThatFits:(CGSize)size
{
    CGSize cSize = self.frame.size;
    BOOL isPortrait = UIInterfaceOrientationIsPortrait([[UIApplication sharedApplication] statusBarOrientation]);
    CGFloat originalHeight = isPortrait ? 44: 32;
    cSize.height = self.tag > 0 ? originalHeight / 2 : originalHeight;
    return cSize;
}

然后当我需要缩小导航栏时(在滚动视图的委托方法中):

CGRect navBarFrame = self.navigationController.navigationBar.frame;
BOOL isPortrait = UIInterfaceOrientationIsPortrait(self.interfaceOrientation);
CGFloat originalHeight = isPortrait ? 44: 32;
navBarFrame.size.height = expand ? originalHeight : originalHeight / 2;
self.navigationController.navigationBar.tag = expand ? 0 : 1;
[UIView animateWithDuration:0.25 animations:^{
    self.navigationController.navigationBar.frame = navBarFrame;
    [self.navigationController.view setNeedsLayout];
}

此外,您可能希望在动画中隐藏导航项(如 UIBarButtonItems)。

【讨论】:

    猜你喜欢
    • 2013-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多