Giter VIP home page Giter VIP logo

jznavigationextension's Introduction

JZNavigationExtension

Version Platform License

JZNavigationExtension integrates many convenient features for UINavigationController.


JZNavigationExtension为UINavigationController集成了许多方便的功能。

Version 2

New cleaner File Struct and safer Implementation.

Features

Overview

overview

overview

Why JZNavigationExtension?

  • Full Screen Pop Gesture Works Perfect With UITableView【全屏Pop手势完美匹配UITableView无冲突】
  • Two navigation bar transition style extension. 【两种导航栏动画拓展】
  • Enable or disable property for each view controller conveniently.【简单地针对每一个Controller开关属性】
  • Pushes/Pops a view controller when hides/shows navigation bar display soomthly【当控制器做Push/Pop时无缝、平滑地显隐导航栏】
  • Release some restrictions make your navigation controller stronger【解除一些限制,使你的导航控制器更加强大】
  • Follow Apple's API design principles,uses as natural as system api【遵循Apple Inc的API设计原则,使用就像系统API一样自然】

Usage

To gives you a fullscreen interactivePopGestureRecognizer【打开全屏Pop手势】:

navigationController.jz_fullScreenInteractivePopGestureEnabled = YES;

Set a completion for fullscreen interactivePopGestureRecognizer【全屏Pop手势回调】:

[self.navigationController jz_setInteractivePopGestureRecognizerCompletion:^(BOOL finished) {
        if (finished) {
            // Codes
        }
    }];

Change navigation bar transition style 【改变导航栏动画】:

navigationController.jz_navigationBarTransitionStyle = JZNavigationBarTransitionStyleDoppelganger

To hides navigation bar when the view controller is pushed on to a navigation controller【支持转场隐藏、显示导航栏】:

UIViewController *viewController = [UIViewController new];
viewController.jz_navigationBarHidden = YES;
[self.navigationController pushToViewController:viewController animated:YES];

To Push/Pop view controller With blocks【导航控制器转场回调】:

[self.navigationController jz_pushViewController:viewController animated:YES completion:^(BOOL finished) {
		///Do any thing
}];

To adjust navigation/tool bar background alpha【调节导航控制器的导航栏、工具条透明度】:

navigationController.jz_navigationBarBackgroundAlpha = yourAlpha;

To change navigation/tool bar size【改变导航控制器的导航栏、工具条大小】:

[navigationController setJz_navigationBarSize:size];

To hide navigation bar background alpha during pop gesture is interactiving【导航栏手势交互时改变导航栏透明度】

UIViewController *viewController = [UIViewController new];
viewController.jz_navigationBarBackgroundHidden = YES;

overview


Change navigation bar tint color by different view controller【导航栏手势交互时改变导航栏颜色】

UIViewController *viewController = [UIViewController new];
viewController.jz_navigationBarTintColor = [UIColor redColor];

overview


Many other features please look up public header files...

NS_AVAILABLE_IOS(7_0)

WIKI

因为许多国内朋友问我的几个API的问题,所以写了一篇文档简单解释了一下,请参考这里

Installation

Use cocoapods

pod 'JZNavigationExtension'

Manually

Drag all source files under floder JZNavigationExtension to your project.

Apps using this library

If you've used this project in a live app, please let me know! Nothing makes me happier than seeing someone else take my work and go wild with it. If you are using JZNavigationExtension in your app or know of an app that uses it, please add it to this list.

jznavigationextension's People

Contributors

dongxinb avatar jazysyu avatar wangruofeng avatar yaojuan avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

jznavigationextension's Issues

堆栈问题

如果我用了- (void)setViewControllers:(NSArray *)viewControllers animated:(BOOL)animated方法,设置堆栈,推出的VC上面经常会出现白条,我又模仿你其他的push方法,把这个setViewControllers方法也重写了一下,没事了。
但是我发现如果我用setViewControllersse后,快速推出栈的话界面很容易报Thread 1:EXC_BAD_ACCESS(code=1,address=0x10)错误,是不是block出现问题了

在TabBarController下会出现问题

重现条件:
在TabBarController框架下

重现步骤:
重复点击无NavBar的界面所属的TabBarItem,会出现隐藏的NavBar,详情请见附件。

screen shot 2015-12-08 at 17 26 24

screen shot 2015-12-08 at 17 26 31

第一次push总是出错

项目结构window-----navVC------tabbarVC。
我的首页的navigationBarBackgroundAlpha是会随着滚动变化的,默认第一次进入为0;
今天我发现,当我第一次进入应用,在不滚动的情况下,只点击了一个searchTitleView,第一次push时,push出的VC无论设置成什么值,第一次alpha总是和首页的alpha相同。

调试出现crash

2016-04-05 17:35:59.145 JZNavigationExtensionDemo[15819:330009] Came from ViewController Class.
2016-04-05 17:36:02.272 JZNavigationExtensionDemo[15819:330009] Controller will be poped.
2016-04-05 17:36:02.542 JZNavigationExtensionDemo[15819:330009] Interactive pop transition has been canceled
2016-04-05 17:36:02.542 JZNavigationExtensionDemo[15819:330009] <SecondViewController: 0x7ffc49ca3740>
2016-04-05 17:36:03.430 JZNavigationExtensionDemo[15819:330009] Controller will be poped.
2016-04-05 17:36:03.715 JZNavigationExtensionDemo[15819:330009] Interactive pop transition has been canceled
2016-04-05 17:36:03.716 JZNavigationExtensionDemo[15819:330009] <SecondViewController: 0x7ffc49ca3740>
2016-04-05 17:36:12.323 JZNavigationExtensionDemo[15819:330009] Controller will be poped.
2016-04-05 17:36:13.617 JZNavigationExtensionDemo[15819:330009] Interactive pop transition has been canceled
2016-04-05 17:36:13.617 JZNavigationExtensionDemo[15819:330009] <SecondViewController: 0x7ffc49ca3740>
2016-04-05 17:36:26.948 JZNavigationExtensionDemo[15819:330009] Controller will be poped.
2016-04-05 17:36:27.033 JZNavigationExtensionDemo[15819:330009] Interactive pop transition has been finished
2016-04-05 17:36:27.034 JZNavigationExtensionDemo[15819:330009] <SecondViewController: 0x7ffc49ca3740>
2016-04-05 17:36:28.256 JZNavigationExtensionDemo[15819:330009] Came from ViewController Class.
2016-04-05 17:36:32.503 JZNavigationExtensionDemo[15819:330009] Controller will push to another.
2016-04-05 17:36:33.783 JZNavigationExtensionDemo[15819:330009] Interactive pop transition has been finished
2016-04-05 17:36:33.783 JZNavigationExtensionDemo[15819:330009] <UIViewController: 0x7ffc49f33240>
2016-04-05 17:36:36.206 JZNavigationExtensionDemo[15819:330009] Controller will push to another.
2016-04-05 17:36:38.181 JZNavigationExtensionDemo[15819:330009] Interactive pop transition has been canceled
2016-04-05 17:36:38.181 JZNavigationExtensionDemo[15819:330009] <UIViewController: 0x7ffc49c40940>
2016-04-05 17:36:38.249 JZNavigationExtensionDemo[15819:330009] Controller will be poped.
2016-04-05 17:36:40.539 JZNavigationExtensionDemo[15819:330009] Interactive pop transition has been canceled
2016-04-05 17:36:40.540 JZNavigationExtensionDemo[15819:330009] <UIViewController: 0x7ffc49c40940>
2016-04-05 17:36:40.561 JZNavigationExtensionDemo[15819:330009] Controller will be poped.
2016-04-05 17:36:43.360 JZNavigationExtensionDemo[15819:330009] Interactive pop transition has been finished
2016-04-05 17:36:43.360 JZNavigationExtensionDemo[15819:330009] <UIViewController: 0x7ffc49c40940>
2016-04-05 17:36:55.110 JZNavigationExtensionDemo[15819:330009] Controller will push to another.
2016-04-05 17:36:56.328 JZNavigationExtensionDemo[15819:330009] Interactive pop transition has been finished
2016-04-05 17:36:56.328 JZNavigationExtensionDemo[15819:330009] <UIViewController: 0x7ffc49cac5c0>
2016-04-05 17:36:58.696 JZNavigationExtensionDemo[15819:330009] Controller will push to another.
2016-04-05 17:37:00.576 JZNavigationExtensionDemo[15819:330009] Interactive pop transition has been finished
2016-04-05 17:37:00.576 JZNavigationExtensionDemo[15819:330009] <UIViewController: 0x7ffc49d6cef0>
2016-04-05 17:37:01.579 JZNavigationExtensionDemo[15819:330009] Controller will be poped.
2016-04-05 17:37:01.600 JZNavigationExtensionDemo[15819:330009] Interactive pop transition has been canceled
2016-04-05 17:37:01.600 JZNavigationExtensionDemo[15819:330009] <SecondViewController: 0x7ffc49f26650>
2016-04-05 17:37:02.473 JZNavigationExtensionDemo[15819:330009] Controller will be poped.
2016-04-05 17:37:04.861 JZNavigationExtensionDemo[15819:330009] Interactive pop transition has been canceled
2016-04-05 17:37:04.862 JZNavigationExtensionDemo[15819:330009] <SecondViewController: 0x7ffc49f26650>
2016-04-05 17:37:06.066 JZNavigationExtensionDemo[15819:330009] Controller will push to another.
2016-04-05 17:37:06.571 JZNavigationExtensionDemo[15819:330009] *** Assertion failure in -[NavigationController _setViewControllers:transition:animated:operation:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit_Sim/UIKit-3512.60.7/UINavigationController.m:983
2016-04-05 17:37:06.586 JZNavigationExtensionDemo[15819:330009] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'All view controllers in a navigation controller must be distinct ((
"<ViewController: 0x7ffc49c24770>",
"<SecondViewController: 0x7ffc49f26650>",
"<UIViewController: 0x7ffc49d6cef0>",
"<UIViewController: 0x7ffc49d6cef0>"
))'
*** First throw call stack:
(
0 CoreFoundation 0x000000010920fd85 __exceptionPreprocess + 165
1 libobjc.A.dylib 0x0000000108c81deb objc_exception_throw + 48
2 CoreFoundation 0x000000010920fbea +[NSException raise:format:arguments:] + 106
3 Foundation 0x00000001088cad5a -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 198
4 UIKit 0x0000000109e5d3d0 -[UINavigationController _setViewControllers:transition:animated:operation:] + 362
5 UIKit 0x0000000109e5c61c __54-[UINavigationController setViewControllers:animated:]_block_invoke + 1328
6 UIKit 0x0000000109e5c0be -[UINavigationController setViewControllers:animated:] + 901
7 JZNavigationExtensionDemo 0x0000000108764bd1 -[UINavigationController(JZExtension) jz_setViewControllers:animated:completion:] + 225
8 JZNavigationExtensionDemo 0x00000001087651cb -[UINavigationController(JZExtension) jz_setViewControllers:animated:] + 107
9 UIKit 0x000000010a6c0f25 -[_UIViewControllerTransitionCoordinator _applyBlocks:releaseBlocks:] + 300
10 UIKit 0x000000010a6bd785 -[_UIViewControllerTransitionContext _runAlongsideCompletions] + 149
11 UIKit 0x000000010a6bd4d8 -[_UIViewControllerTransitionContext completeTransition:] + 117
12 UIKit 0x0000000109c788a3 __53-[_UINavigationParallaxTransition animateTransition:]_block_invoke95 + 834
13 UIKit 0x0000000109d4053e -[UIViewAnimationBlockDelegate _didEndBlockAnimation:finished:context:] + 644
14 UIKit 0x0000000109d1d7ff -[UIViewAnimationState sendDelegateAnimationDidStop:finished:] + 241
15 UIKit 0x0000000109d1dbae -[UIViewAnimationState animationDidStop:finished:] + 80
16 QuartzCore 0x000000010e4333c8 _ZN2CA5Layer23run_animation_callbacksEPv + 308
17 libdispatch.dylib 0x000000010c0953eb _dispatch_client_callout + 8
18 libdispatch.dylib 0x000000010c07d1ef _dispatch_main_queue_callback_4CF + 1738
19 CoreFoundation 0x00000001091690f9 CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE + 9
20 CoreFoundation 0x000000010912ab99 __CFRunLoopRun + 2073
21 CoreFoundation 0x000000010912a0f8 CFRunLoopRunSpecific + 488
22 GraphicsServices 0x000000010dee5ad2 GSEventRunModal + 161
23 UIKit 0x0000000109c8ff09 UIApplicationMain + 171
24 JZNavigationExtensionDemo 0x000000010876818f main + 111
25 libdyld.dylib 0x000000010c0ca92d start + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException
(lldb)

jz_wantsNavigationBarVisible

jz_wantsNavigationBarVisible不好用了,手势返回到一半停住,navigationbar就已经完全显示并且覆盖页面了、如果继续放开手势返回(弹回当前页),navigationbar仍然处于显示

导航栏滑动返回效果

请问,(斗鱼TV和网易新闻页面pop切换效果)那种有导航栏的返回动画效果怎么做的呢?本级导航栏滑动返回的时候(pop),跟上一级的导航栏感觉是独立的效果,这个支持吗

提交审核,说使用了私有API,被拒

Non-public API usage:

The app references non-public selectors in Maizuo3.0: _isTransitioning, isInteractiveTransition, navigationTransitionView:didEndTransition:fromView:toView:

iphone6s设备上出现crash

场景:3d touch某一行cell进行预览将要跳转的新界面,此时偶尔(大概率)会出现crash,提示信息: this class is not key value coding-compliant for the key __parent

仍然是jz_wantsNavigationBarVisible的问题

A设置 self.jz_wantsNavigationBarVisible=yes
B设置 self.jz_wantsNavigationBarVisible=no
A-->B 然后 B返回A,navigation就不见了,这个代码在1.4.7可以用,感觉作者把自己都绕晕。1.4.0那种方法很好,在需要改变navigation的时候才改变,不需要的时候就不需要写多余的东西

从隐藏navigationBar的VC_A push 到隐藏navigationBar的VC_B,滑动B,但不返回,之后在明确返回,进入其他不隐藏navigationBar的VC_C后,在push一个不隐藏navigationBar的VC_D上面的barButtonItem会闪一下VC_D的navigationitems,随后显示C的navigationitems

从隐藏navigationBar的VC_A push 到隐藏navigationBar的VC_B,滑动B,但不返回,之后再明确返回到VC_A,进入其他不隐藏navigationBar的VC_C后,在push一个不隐藏navigationBar的VC_D上面的barButtonItem会闪一下VC_D的navigationitems,随后显示C的navigationitems
上边说的和绕口令一样...出现这个问题,很奇怪.我试了FDFullscreenPopGesture,也会出现相同的问题.
如果时间充裕,还是希望能有回复的.多谢~


补充一点,刚才说的VC_A的navigationController在tabbarController中,版本用的是1.3.0

-UINavigationBar sizeThatFits:

Using this extension with AviarySDK photo editing tools causes broken UINavigationBar layouts that don't respond or in other cases it will crash.

Commenting out the method UINavigationBar sizeThatFits: fixes the issue.

screen shot 2015-07-16 at 09 44 24

xcode7,iOS9.0.1出现崩溃

崩溃的原因:*** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<UIPercentDrivenInteractiveTransition 0x14cfab5f0> valueForUndefinedKey:]: this class is not key value coding-compliant for the key __parent.'
*** First throw call stack:
(0x184b4cf5c 0x19973ff80 0x184b4cc1c 0x185a51d90 0x1859a40cc 0x1000c7334 0x1000c7790 0x18a43099c 0x18a5fbb28 0x18a242a5c 0x18a0d56ac 0x18a5fce78 0x18a095118 0x18a0931ec 0x18a0d3564 0x18a0d2ac8 0x18a0a3a2c 0x18a0a1f18 0x184b045a4 0x184b04038 0x184b01d38 0x184a30dc0 0x18fb84088 0x18a10af60 0x10005e698 0x199f6a8b8)
libc++abi.dylib: terminating with uncaught exception of type NSException
提示没有这个__parent这个key。

崩溃的位置:

  • (void)_handleInteractiveTransition:(BOOL)isCancel {
    UINavigationController *navigationController = (UINavigationController *)[self valueForKey:@"__parent"];
    UIViewController *adjustViewController = isCancel ? navigationController.interactivePopedViewController : navigationController.visibleViewController;
    navigationController.navigationBarBackgroundAlpha = adjustViewController.navigationBarBackgroundHidden ? 0 : (1-navigationController._navigationBarBackgroundReverseAlpha);
    navigationController.interactivePopedViewController = nil;
    }

禁用单个viewcontroller的右滑返回问题

有A,B,C三个ViewController。A->B, B在viewWillAppear里self.navigationController.interactivePopGestureRecognizer.enabled = NO;禁止右滑返回,然后B->C后
C的整个界面卡住无反应了。。
(C在viewWillAppear里设置了self.navigationController.interactivePopGestureRecognizer.enabled = YES或B在viewDidDisappear里设置了self.navigationController.interactivePopGestureRecognizer.enabled = YES界面都是卡住的)

拖动手势影响到navBar的正常显示

当第一个controller隐藏NavBar,push到第二个controller(第二个controller不隐藏navBar),向下或向上任意拖动一下(不pop到第一个controller),第二个controller的NavBar被一块黑色(或白色)的替代了

jz_wantsNavigationBarVisible

这个最新版本好像 有问题 在A push 到B的时候, B的jz_wantsNavigationBarVisible改为NO pop回来A的导航也不见了 在老版本中好像 这个还是好使用的

返回按钮

请问如何全局设置Nav的按钮样式呢

setInteractivePopGestureRecognizerCompletion这个方法是和navigationController的生命周期绑定的

描述:当在一个controller中调用setInteractivePopGestureRecognizerCompletion它时,发现在同一个navigationController中,任何一个滑动返回都会掉用这个方法。

我试着在这个setInteractivePopGestureRecognizerCompletion完成时,用navigationController.interactivePopedViewController来获取当前的controller做判断,但是获取不到这个controller。

旧版切换到新版出现问题

旧版本的NavigationBar的颜色是黑色正常,JZNavigationExtension切换到目前最新版后NavigationBar的颜色变为白色了,望解答,是我使用姿势不正确么?谢谢

导航栏隐藏 bug

从 Controller A (隐藏了导航栏)进入搜索 UISearchDisplayController(搜索 Controller),然后搜索push 进入 COntroller B(同样隐藏导航栏),此时拖动 controller B 一段距离后放开(不要返回到 Controller A,依然在 Controller B 中),此时本来 controller B 隐藏的导航栏出现了....

大神 你好

我看你写的 好6啊,但是我有个问题,就是你做出来的动画,是用什么录屏软件啊?可否告知一二。。

hello><

presentViewController 控制器的时候,如何禁用您的黑魔法呢,
比如一个baseNAV
我想presentViewController到一个新的NAV,如何才能使新的NAV不是baseNAV呢(NAV:导航控制器)

push问题

点击item快速进去push时,你jz_pushViewController:(UIViewController *)viewController animated:(BOOL)animated completion:(_jz_navigation_block_t)completion 方法内的操作会对导航栏有影响,变成空白栏,如果注释掉一部分代码,只保留[self jz_pushViewController:viewController animated:animated]; 就没问题,希望修复

在地图的应用场景下

地图的页面Navigation Hide 了,滑动地图push ViewController 第二个页面的Navigation 也跟着隐藏了
在push 第二个 ViewController 设置了 显示Navigation , 效果没出来

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.