Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

侧滑返回的时候,右边自定义按钮闪烁 #183

Open
winfast opened this issue Aug 28, 2023 · 8 comments
Open

侧滑返回的时候,右边自定义按钮闪烁 #183

winfast opened this issue Aug 28, 2023 · 8 comments

Comments

@winfast
Copy link

winfast commented Aug 28, 2023

您好:我在使用最新的版本发现了一个奇怪的现象,经过代码调试发现是
-(void)updateNavigationBarTintColorForViewController:(UIViewController *)vc 这个方法中
self.navigationBar.tintColor = vc.hbd_tintColor;引起了的

我是这样写的,
UIControl redView2 = UIControl.alloc.init;
redView2.frame = CGRectMake(0, 0, 80, 40);
redView2.backgroundColor = UIColor.redColor;
[redView2 addTarget:self action:@selector(pushToNext:) forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem
item2 = [[UIBarButtonItem alloc] initWithCustomView:redView2];//定义左边按钮
self.navigationItem.rightBarButtonItem = item2;

在侧滑返回的时候,右边的按钮会闪一下

@listenzz
Copy link
Owner

listenzz commented Aug 28, 2023

试着加上 redView2.translatesAutoresizingMaskIntoConstraints = NO; 能不能解决问题

如果不能,请告诉我,假如从 A push 到 B,这个按钮是定义在 A 还是 B?

@winfast
Copy link
Author

winfast commented Aug 28, 2023

🙏大佬的导航库,节省了我很多开发工作量。
目前看到效果不可以解决问题,
我使用你的Demo,
if (self.navigationController.childViewControllers.count == 1) {
// self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"test" style:(UIBarButtonItemStylePlain) target:self action:@selector(pushToNext:)];

    UIControl *redView2 = UIControl.alloc.init;
    redView2.frame = CGRectMake(0, 0, 80, 40);
    redView2.backgroundColor = UIColor.redColor;

// redView2.translatesAutoresizingMaskIntoConstraints = NO;
[redView2 addTarget:self action:@selector(pushToNext:) forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem*item2 = [[UIBarButtonItem alloc] initWithCustomView:redView2];//定义左边按钮
self.navigationItem.rightBarButtonItem = item2;
}

点击这个按钮后进入下一个控制器,然后侧滑退出二级UI后,这个时候发现,导航栏右边的按钮会突然显示

@winfast
Copy link
Author

winfast commented Aug 30, 2023

大佬,帮我看一下下,确实存在这个现象。

@winfast
Copy link
Author

winfast commented Aug 30, 2023

试着加上 redView2.translatesAutoresizingMaskIntoConstraints = NO; 能不能解决问题

如果不能,请告诉我,假如从 A push 到 B,这个按钮是定义在 A 还是 B?

🙏大佬的导航库,节省了我很多开发工作量。
目前看到效果不可以解决问题,
我使用你的Demo,
if (self.navigationController.childViewControllers.count == 1) {
// self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"test" style:(UIBarButtonItemStylePlain) target:self action:@selector(pushToNext:)];

UIControl *redView2 = UIControl.alloc.init;
redView2.frame = CGRectMake(0, 0, 80, 40);
redView2.backgroundColor = UIColor.redColor;

// redView2.translatesAutoresizingMaskIntoConstraints = NO;
[redView2 addTarget:self action:@selector(pushToNext:) forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem*item2 = [[UIBarButtonItem alloc] initWithCustomView:redView2];//定义左边按钮
self.navigationItem.rightBarButtonItem = item2;
}

点击这个按钮后进入下一个控制器,然后侧滑退出二级UI后,这个时候发现,导航栏右边的按钮会突然显示

@listenzz
Copy link
Owner

@winfast 这是个兼容性问题,在 iOS 16 以上会出现,暂时不清楚原因。

@winfast
Copy link
Author

winfast commented Aug 30, 2023

@winfast 这是个兼容性问题,在 iOS 16 以上会出现,暂时不清楚原因。

我昨天调试的发现主要是
-(void)updateNavigationBarTintColorForViewController:(UIViewController *)vc 这个方法中
self.navigationBar.tintColor = vc.hbd_tintColor;引起了的的效果,是不是在设置这个的时候,导航栏的customView重新刷新了

@listenzz
Copy link
Owner

@winfast 这是个兼容性问题,在 iOS 16 以上会出现,暂时不清楚原因。

我昨天调试的发现主要是 -(void)updateNavigationBarTintColorForViewController:(UIViewController *)vc 这个方法中 self.navigationBar.tintColor = vc.hbd_tintColor;引起了的的效果,是不是在设置这个的时候,导航栏的customView重新刷新了

这行代码去掉会引发其它问题。

@winfast
Copy link
Author

winfast commented Nov 30, 2023

@winfast 这是个兼容性问题,在 iOS 16 以上会出现,暂时不清楚原因。

我昨天调试的发现主要是 -(void)updateNavigationBarTintColorForViewController:(UIViewController *)vc 这个方法中 self.navigationBar.tintColor = vc.hbd_tintColor;引起了的的效果,是不是在设置这个的时候,导航栏的customView重新刷新了

这行代码去掉会引发其它问题。

你好,在iOS15以上的系统,我修改了一下你的这个方法代码如下

  • (void)updateNavigationBarTintColorForViewController:(UIViewController *)vc {
    if (@available(iOS 13.0, *)) {
    self.navigationBar.scrollEdgeAppearance.titleTextAttributes = vc.hbd_titleTextAttributes;
    self.navigationBar.standardAppearance.titleTextAttributes = vc.hbd_titleTextAttributes;
    } else {
    self.navigationBar.tintColor = vc.hbd_tintColor;
    self.navigationBar.titleTextAttributes = vc.hbd_titleTextAttributes;
    }
    }
    修改之后,在iOS15以上的系统,侧滑的时候右边的自定义按钮没有闪烁了,感觉这样修改也没有问题,这样修改后,不会影响iOS13以前的系统,iOS14没有验证, iOS15,iOS16系统没有问题。您有空的话,能不能更新一个版本。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants