Giter Club home page Giter Club logo

smilezxlee / zxnavigationbar Goto Github PK

View Code? Open in Web Editor NEW
325.0 5.0 56.0 2.83 MB

灵活轻量的自定义导航栏,导航栏属于控制器view,支持导航栏联动,一行代码实现【导航栏背景图片设置、导航栏渐变、折叠、修改Item大小和边距、自定义导航栏高度、全屏手势返回、pop拦截、仿系统导航栏历史堆栈】等各种效果

License: MIT License

Ruby 0.12% Objective-C 97.75% C 2.13%
navigationbar navigationbaritems navigation navigation-bar navigationview

zxnavigationbar's Issues

暗黑模式

我看标题是可以正常响应的,但是leftBtn和rightBtn会很奇怪,有的时候能响应,有的时候不能响应。

设置状态栏颜色不管事怎么解决

self.zx_navStatusBarStyle = ZXNavStatusBarStyleLight; 在当前控制器,不管事,怎么解决???

-(UIStatusBarStyle)preferredStatusBarStyle{
return UIStatusBarStyleLightContent;
}
下边这种方法也不管事,还是黑色的,不知道为什么?

与masonry布局冲突

我baseController继承ZXNavigationBarController
然后隐藏导航栏

  • (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    self.zx_hideBaseNavBar = YES;
    }

  • (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
    self.zx_hideBaseNavBar = NO;
    }

masonry布局为
[self.view addSubview:self.tableView];

[_tableView mas_makeConstraints:^(MASConstraintMaker *make) {
    make.edges.mas_equalTo(UIEdgeInsetsMake(kNavStatusBar, 0, kTabBarHeight, 0));
}];

其中kNavStatusBar打印为44 但是运行结果tableView.top 为0

TableViewController的显示有问题。

我看到你有设置ZXNavigationBarTableViewController,继承了之后,tableview的表头会计算成没有导航栏,会在 ZXNavigationBar的下面。

合qq的QMUIKit共同使用出现一个bug

我也不清楚是什么原因!就是我使用ZXNavigationBarNavigationController作为导航控制器的时候,侧滑的时候可以复现。
image
在这个地方开始多次循环然后野指针了。
QMUIKit里面的UIView+QMUI这个分类里面
image
我搞不清楚是什么问题了,大佬能不能帮忙看一下。
DEMO中pod导入 pod 'QMUIKit',侧滑即可复现。

关于tableViewController

如何支持tableViewController呢? 一些页面想在storyBoard上直接用TableViewController的静态cell画UI,没办法继承作者的ZXNavigationBarController,能否扩展一下?

返回按钮

用系统的导航栏push继承ZXNavigationBar导航的页面 如何去掉系统返回的字段
WeChat0bfcae1116e78a19c2ebd70b85cb30a0在视图层看到的效果是这样的WeChatee10ac1d3e869a923fce888f41ab2508最上方有一个导航

判断刘海屏的方式有问题,导致在 iphone 11 pro max上获取到的状态栏高度是20,进而导致标题偏上

image
好像是这个刘海屏的判断有问题
/**
判断是否是刘海屏

@return 是否是刘海屏
*/
#define ZXIsBangScreen ({
int cFlag = 0;
if (@available(iOS 11.0, *)) {
if ([UIApplication sharedApplication].delegate.window.safeAreaInsets.top == 44) {
cFlag = 1;
}else{
cFlag = 0;
}
}else{
cFlag = 0;
}
cFlag;
})
我测试的手机是iphone 11 pro max 你这个宏定义获取到的状态栏高度是20,实际高度应该是44

push到B页面,B页面有个分页控制器,在分页控制器里面的第一页里面不能响应全屏返回手势

//加这一行代码即可解决ScrollView与侧滑返回手势冲突问题
//[self zx_setPopGestureCompatibleScrollView:self.pageController.downSc];
__weak typeof(self) weakSelf = self;
self.zx_popGestureShouldRecognizeSimultaneously = ^BOOL(UIGestureRecognizer * _Nonnull otherGestureRecognizer) {
if(weakSelf.pageController.downSc.contentOffset.x <= 0){
return YES;
}
return NO;
};
这个代码加了没效果。

手势侧滑返回

手势侧滑慢慢向右滑动,等滑动到最右边的时候 会出现系统导航栏突然闪烁一下

可以适配RTL吗

因为项目要适配阿拉伯语言,全都是镜像,页面都是反的

右按钮位置不对

在iOS10.3的系统上,右按钮大概率位置不对,但是在设置完右按钮文字或图片后,再次设置zx_navItemMargin, 这个问题得以解决。在iOS高版本上没发现有这个问题。

iPad竖屏下上面导航条高度为50

我去,我一直以为iPad上面也是44的高度呢,它竟然是50。。
完犊子了,那我之前的项目岂不是也要炸锅....
大佬,能不能考虑一下iPad上的适配啊,[拜托了],我先去做适配去了

TableViewController还是有比较严重的问题

基本情况:静态表格,设置个tableHeaderView,在单元格中放置一个或几个textView。当textView输入文字产生换行时,顶部导航栏高度计算就会出问题,会延伸覆盖tableHeaderView。是在storyboard中设置的。应该区别不大。

设置返回按钮默认图片

将HEBaseViewController 继承ZXNavigationBarController,我再基类里定义返回按钮图片, self.zx_backBtnImageName = @"back_black",所有的顶层ViewController都会显示返回按钮。

设置返回按钮默认图片应该也需要加入这个判断 if(self.navigationController && self.navigationController.viewControllers.count > 1)

代码建议

UIView+ZXNavFrameExtension这个分类里面的方法建议加上前缀zx_

有没有白名单功能

想加白名单直接过滤掉不用的vc,要是能做到直接前缀就更好,旧项目用到了云信的uikit的框架,里面有不少vc又不想改源码,作者大大有没有简单的方法

直接设置导航栏透明效果

我看到只有跟随ScrollView设置导航栏透明度效果,我尝试自定义导航栏透明无效,有什么方法能直接设置导航栏透明吗?

关于iPhone 12 mini NavigationBar 总高度问题

目前使用的是xcode12.2 iPhone 12 mini 模拟器出现的情况
按照以往常规的计算就是用状态栏高度加上NavigationBar固定44的高度来获取上面总的高度
示例代码
STATUSBAR_HEIGHT = [UIApplication sharedApplication].statusBarFrame.size.height
NAVBAR_HEIGHT = 44.0f
STATUSBAR_NAVBAR_HEIGHT = STATUSBAR_HEIGHT + NAVBAR_HEIGHT;
经过测试除了iPhone 12 mini 模拟器的高度有问题,其他的设备正常
目前iPhone 12 mini通过代码计算获取是88的高度,但是我随便新建一个项目工程打印总高度是94,也不知道是不是模拟器bug,因为没有真机暂时无法定位具体问题
这里提供截图和打印信息
CC552D75-4277-4B44-812A-4D472B8E5AD1

BackButtonHandlerProtocol 协议名重复

BackButtonHandlerProtocol 这个协议,和老项目里有uiviewcontroller的分类的协议名字一样,导致项目报错无法运行,我可以给老项目的协议名更改吗? 改了会有影响吗? 你这在pod 没法改,加个前缀.

有两处代码写错了

位置:ZXNavigationBarController.m
行数:510行和521行
描述:给leftButton和rightButton添加的点击回调赋值给了subRightButton

#pragma mark 设置左侧按钮图片和点击回调
- (void)zx_setLeftBtnWithImg:(UIImage *)img clickedBlock:(nullable leftBtnClickedBlock)clickBlock{
    [self.zx_navLeftBtn setImage:img forState:UIControlStateNormal];
    ((ZXNavigationBar *)self.zx_navBar).zx_subRightBtnClickedBlock = ^(ZXNavItemBtn * _Nonnull btn) {
        if(clickBlock){
            clickBlock(btn);
        }
    };
    
}

#pragma mark 设置右侧按钮图片和点击回调
- (void)zx_setRightBtnWithImg:(UIImage *)img clickedBlock:(nullable leftBtnClickedBlock)clickBlock{
    [self.zx_navRightBtn setImage:img forState:UIControlStateNormal];
    ((ZXNavigationBar *)self.zx_navBzx_subRightBtnClickedBlockck** = ^(ZXNavItemBtn * _Nonnull btn) {
        if(clickBlock){
            clickBlock(btn);
        }
    };
    
}

当导航条透明时跳转到使用系统导航条的页面,返回的时候顶部透明效果需要优化

hello,大佬,我又来了!来一波py交易
需要优化的样式:
IMG_889A59961173-1
复现方法:
在微博demoDemoWeiboHotViewController中 设置右上角按钮点击跳转到使用系统导航条的页面

    [self zx_setRightBtnWithImgName:@"right_more_icon" clickedBlock:^(ZXNavItemBtn * _Nonnull btn) {
        NSLog(@"点击了最右边的按钮");
        Class DemoSystemBarViewController = NSClassFromString(@"DemoSystemBarViewController");
        id vc = [DemoSystemBarViewController new];
        [self.navigationController pushViewController:vc animated:YES];
    }];

看看能不能优化一波。

如果将ZXNavigationBar的导航栏隐藏了是不是就不能监听返回手势了

在控制器里面加了self.zx_hideBaseNavBar = YES;
那么下面的拦截侧滑返回的手势就失效了吗?
//拦截侧滑返回手势和返回按钮点击事件
self.zx_handlePopBlock = ^BOOL(ZXNavigationBarController * _Nonnull viewController, ZXNavPopBlockFrom popBlockFrom) {
//viewController:当前控制器
//popBlockFrom:通过什么方式(点击返回按钮或侧滑返回手势)触发pop操作

    //doSomething
    //返回YES则代表不禁止pop操作,返回NO则禁止pop操作
    @strongify(self);
    [self backClick];
    
    return NO;
};

我想在当前页面禁止pop手势,或者是拦截返回手势,设置以下无效,

请问具体需要怎么操作.谢谢.

  • (void)viewWillAppear:(BOOL)animated {
    self.zx_popGestureCoverRatio = 0.1;
    self.zx_handlePopBlock = ^BOOL(ZXNavigationBarController * _Nonnull viewController, ZXNavPopBlockFrom popBlockFrom) {
    //viewController:当前控制器
    //popBlockFrom:通过什么方式(点击返回按钮或侧滑返回手势)触发pop操作

      //doSomething
      //返回YES则代表不禁止pop操作,返回NO则禁止pop操作
      NSLog(@"");
      return NO;
    

    };
    }

提个建议

#pragma mark - 重写父类pop和push相关方法

  • (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated{
    self.navigationBarHidden = YES;
    [self updateTopViewController:viewController];
    if(!self.zx_disableAutoHidesBottomBarWhenPushed){
    [viewController setHidesBottomBarWhenPushed:self.viewControllers.count >= 1];
    }
    [super pushViewController:viewController animated:YES];
    }

改为

[super pushViewController:viewController animated:animated];

项目中用到,有时候真的不需要动画....

好像对TableViewController失效了

我新建项目用ZXNavigationBarTableViewController 设置TableViewController无效了。上方导航栏是空白的。普通的ViewController是正常的,而且我打开之前的项目,是正常的。新建项目的代码和用法完全复制之前项目的,只是xcode升级了,不知道你这个版本的代码测试过没有

设置多个ScrollView手势冲突,只有最后一个才会支持手势返回

如果一个ViewController里, 有一个横向移动的UICollectionView, 还有一个UIScrollview分页控制器的话.
如下设置,
[self zx_setPopGestureCompatibleScrollView:self.horizontalView.collectionView];
[self zx_setPopGestureCompatibleScrollView:self.scrollView];
或者
[self zx_setPopGestureCompatibleScrollViews:@[self.horizontalView.collectionView, self.scrollView]];

这样设置的话, 只有最后一个设置手势冲突的UIView,才会支持手势返回.

safeArea布局问题

使用storyboard时,如果勾掉Use Safe Area Layout Guides时,tableView会距导航有64的间隔
如图所示
Simulator Screen Shot - iPhone 12 Pro Max - 2021-05-10 at 10 19 19

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.