Skip to content

A native UINavigationBar with perfect transition animation

License

Notifications You must be signed in to change notification settings

JpacheGitHub/PBNavigationBar

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

21 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

PBNavigationBar

PBNavigationBar 可以让你的 App 的 UINavigationBar 具有完美的转场动画, 完全使用 Category 实现, 不会对你的业务代码造成入侵, 你可以完全无感知的使用它, 只需要像往常一样在 - viewWillAppear: 中设置你想要的 UINavigationBar 样式.

使用CocoaPods安装

target 'TargetName' do
	pod 'PBNavigationBar'
end

使用

当你前后两级页面的 UINavigationBar 颜色不一样的时候, 你可以像往常一样设置颜色:

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    [self setNavBarBackgroundImage:nil shadowImage:nil];
    /*
     或者使用系统的设置方法
     [self.navigationController.navigationBar setBackgroundImage:nil forBarMetrics:UIBarMetricsDefault];
     [self.navigationController.navigationBar setShadowImage:nil];
     */
    self.navigationController.navigationBar.barTintColor = [UIColor redColor];
}

然后在 UIViewController 中写入下面的方法, 并返回 YES, 就可以获得这种完美的 UINavigationBar 转场动画.

- (BOOL)useDifferentNavigationBar {
    return YES;
}

当只需要使用系统默认的转场方式的时候, 什么都不需要做, 也不需要在 - useDifferentNavigationBar 中返回 NO, 因为它默认就是返回 NO 的.

效果

如果 App 对 UINavigationBar 的处理不到位, 一些时候它的转场动画会很丑, 比如从有颜色的返回到白色的时候, UINavigationBar 会突然变成白色, 完全没有动画过度效果可言, 看了很多 App 和网上的很多"一次性解决 UINavigationBar 所有问题"类似的文章之后仍然没有找到很好的解决方案, 便想到了细节做足的微信, 之前有注意到微信的红包和web页返回的时候会让人看得很舒服, 然后就开始了寻找方案之路...

先来看一下微信在返回时 UINavigationBar 的两种返回状态

这种是正常的返回动画:

这种是红包, web页面等需要特殊处理的页面的返回动画(这个特殊处理就要看自身的业务需求了):

特殊处理

尝试了各种方法之后, 终于实现了类似的效果

简单说一下效果, 就是正常返回保持不变, 需要处理的返回, 返回时, 上下两个页面的 UINavigationBar 分别附着在各自的页面上, 但只是背景颜色和图片, 对于 UIBarButtonItem, 还在原来的位置不动, 只是进行系统那种透明度的转变来达到消失和出现.

下面是使用PBNavigationBar之后的效果

About

A native UINavigationBar with perfect transition animation

Resources

License

Stars

Watchers

Forks

Packages

No packages published