diff --git a/README.md b/README.md index c7e8d0d..a23c4ac 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ pod 'ZXNavigationBar' *** ### 功能&特点 - [x] 每个控制器单独管理自己的导航栏,导航栏属于控制器的子view,不再属于统一的导航控制器 -- [x] 兼容iOS8-iOS14,兼容刘海屏、iPad等各种设备,适配横竖屏,无需担心系统更新需要重新适配导航栏 +- [x] 兼容iOS8-iOS18,兼容刘海屏、药丸屏、iPad等各种设备,适配横竖屏,无需担心系统更新需要重新适配导航栏 - [x] 仅需一行代码即可轻松设置导航栏背景图片、背景色、导航栏渐变、状态栏颜色、Item大小和边距等各类属性 - [x] 仅需一行代码即可实现拦截pop手势与点击返回事件,并决定是否要响应pop操作 - [x] 仅需一行代码即可解决scrollView横向滚动与pop手势冲突问题 @@ -31,7 +31,7 @@ pod 'ZXNavigationBar' - [x] 支持全屏手势返回 - [x] 支持自定义手势返回范围 - [x] 支持监听手势返回进度 -- [x] 仿系统导航栏历史堆栈效果,支持iOS8-iOS14,支持自定义基本样式 +- [x] 仿系统导航栏历史堆栈效果,支持iOS8-iOS16,支持自定义基本样式 - [x] 若从Xib中加载控制器View,添加子View无需手动设置距离导航栏顶部约束,`ZXNavigationBar`会自动处理 ### 反馈&交流qq群:[790460711](https://jq.qq.com/?_wv=1027&k=vU2fKZZH) @@ -107,7 +107,6 @@ self.fd_interactivePopDisabled = YES; * `ZXNavigationBar`的处理方法是: * 如果您是通过frame或者Masonry设置控件布局,请设置y距离顶部高度为导航栏高度,可直接使用`ZXNavBarHeight`这个宏 * 如果您是通过Xib加载控制器View,则`ZXNavigationBar`会自动将内部约束设置为距离顶部为导航栏高度+原始高度,您无需作任何处理 -* 若您是通过Xib加载控制器View,且禁用了SafeArea,请设置(若使用了SafeArea,请忽略): ### 导航栏设置 #### 注意:以下设置均在控制器中进行,self代表当前控制器(当前控制器需继承于`ZXNavigationBarController`) @@ -415,6 +414,15 @@ self.zx_handlePopBlock = ^BOOL(ZXNavigationBarController * _Nonnull viewControll //如果您在项目中使用了FDFullscreenPopGesture,需要关闭FDFullscreenPopGesture在当前控制器的全屏侧滑返回手势,否则zx_handlePopBlock无法拦截侧滑返回手势 self.fd_interactivePopDisabled = YES; ``` + +* 如果需要拦截的控制器未继承于ZXNavigationBarController,可以在继承于ZXNavigationBarNavigationController的自定义导航控制器的viewDidLoad中: +```objective-c +self.zx_navHandlePopGestureBlock = ^BOOL(UIViewController * _Nonnull topViewController) { + //这里的优先级高于控制器中的self.zx_handlePopBlock。如果返回NO,则代表直接关闭侧滑返回手势,控制器中的self.zx_handlePopBlock不会触发;如果返回YES,则交由控制器处理 + return NO; +}; +``` + #### 设置全屏返回手势 ```objective-c 将您的导航控制器继承于`ZXNavigationBarNavigationController`或使用`ZXNavigationBarNavigationController`作为您的导航控制器即可 diff --git a/ZXNavigationBarDemo/ZXNavigationBarDemo.xcodeproj/project.xcworkspace/xcuserdata/mac.xcuserdatad/UserInterfaceState.xcuserstate b/ZXNavigationBarDemo/ZXNavigationBarDemo.xcodeproj/project.xcworkspace/xcuserdata/mac.xcuserdatad/UserInterfaceState.xcuserstate index 38b6466..5b916fd 100644 Binary files a/ZXNavigationBarDemo/ZXNavigationBarDemo.xcodeproj/project.xcworkspace/xcuserdata/mac.xcuserdatad/UserInterfaceState.xcuserstate and b/ZXNavigationBarDemo/ZXNavigationBarDemo.xcodeproj/project.xcworkspace/xcuserdata/mac.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/ZXNavigationBarDemo/ZXNavigationBarDemo/ZXNavigationBar/ZXNavigationBarSubViews/ZXNavItemBtn.m b/ZXNavigationBarDemo/ZXNavigationBarDemo/ZXNavigationBar/ZXNavigationBarSubViews/ZXNavItemBtn.m index 596f16f..6501843 100644 --- a/ZXNavigationBarDemo/ZXNavigationBarDemo/ZXNavigationBar/ZXNavigationBarSubViews/ZXNavItemBtn.m +++ b/ZXNavigationBarDemo/ZXNavigationBarDemo/ZXNavigationBar/ZXNavigationBarSubViews/ZXNavItemBtn.m @@ -79,7 +79,7 @@ - (void)setImage:(UIImage *)image forState:(UIControlState)state{ if(self.zx_customView && image){ return; } - if(self.zx_tintColor){ + if(self.zx_tintColor || self.zx_imageColor){ image = [image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]; }else{ image = [image imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; @@ -92,6 +92,25 @@ - (void)setImage:(UIImage *)image forState:(UIControlState)state{ [self noticeUpdateFrame]; } +- (void)setSelected:(BOOL)selected{ + [super setSelected:selected]; + [self zx_layoutImageAndTitle]; + [self noticeUpdateFrame]; +} + +- (void)setHighlighted:(BOOL)highlighted{ + [super setHighlighted:highlighted]; + [self zx_layoutImageAndTitle]; + [self noticeUpdateFrame]; +} + +- (void)setEnabled:(BOOL)enabled{ + [super setEnabled:enabled]; + [self zx_layoutImageAndTitle]; + [self noticeUpdateFrame]; +} + + - (void)setZx_tintColor:(UIColor *)zx_tintColor{ _zx_tintColor = zx_tintColor; self.tintColor = zx_tintColor; @@ -99,7 +118,6 @@ - (void)setZx_tintColor:(UIColor *)zx_tintColor{ [self resetTitle]; } - - (void)setZx_imageColor:(UIColor *)zx_imageColor{ _zx_imageColor = zx_imageColor; self.tintColor = zx_imageColor; @@ -184,6 +202,9 @@ - (void)setZx_customView:(UIView *)zx_customView{ [self noticeUpdateFrame]; return; } + if(_zx_customView && _zx_customView.superview){ + [_zx_customView removeFromSuperview]; + } _zx_customView = zx_customView; if(![self.subviews containsObject:zx_customView]){ [self addSubview:zx_customView];