自定义导航栏,系统导航栏一堆bug

2024-03-25 04:08

本文主要是介绍自定义导航栏,系统导航栏一堆bug,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

       开发的过程中,我们可能会遇到有的界面需要把导航栏隐藏的问题。而一旦在该界面隐藏了导航栏,在与其他界面交互的过程中就会出现一些很恶心的问题,特别是有的从桌面啊,通知啊,widget进入某些界面的话,问题就更多。因为导航栏属于系统层级,某一界面的修改都将影响所有界面的导航栏显示。而解决这种问题的方式就是将系统的导航栏隐藏,自定义一个导航栏。纵观世面上的APP,很多已经采用了诸如此类的方式,比如淘宝,美团,携程等等。不多说,笔者直接将自己采用的方式告诉大家:

//

//  LEOBaseNavigationController.h

//  PrivacyGuard

//

//  Created by Ternence on 15/11/11.

//  Copyright © 2015 LEO. All rights reserved.

//


#import <UIKit/UIKit.h>

#import "LEOBaseViewController.h"


@interface LEOBaseNavigationController : UINavigationController


@property (nonatomic,strong) UINavigationBar *navigationBar;

@property (nonatomic,strong) UINavigationItem *titleItem;


- (void)setupNavigationBar;

- (void)backButtonAction;

@end


//

//  LEOBaseNavigationController.m

//  PrivacyGuard

//

//  Created by Ternence on 15/11/11.

//  Copyright © 2015 LEO. All rights reserved.

//


#import "LEOBaseNavigationController.h"


@interface LEOBaseNavigationController ()


@end


@implementation LEOBaseNavigationController


- (void)viewDidLoad

{

    [superviewDidLoad];

}


- (void)setupNavigationBar

{

    self.navigationController.navigationBar.hidden =YES;

    

    self.navigationBar = [[UINavigationBaralloc] initWithFrame:CGRectMake(0,0, SCREEN_WIDTH,64)];

    self.navigationBar.barTintColor =C5;

    [self.viewaddSubview:self.navigationBar];

    

    self.titleItem = [[UINavigationItemalloc] initWithTitle:NSLocalizedString(@"device monitor Bettery Percentage",nil)];

    self.navigationBar.titleTextAttributes =@{NSForegroundColorAttributeName:C4, NSFontAttributeName: T1};

    self.titleItem.leftBarButtonItem = [[UIBarButtonItemalloc] initWithImage:[[UIImageimageNamed:@"navigationBar_leftBack_blue"]imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]

                                                                        style:UIBarButtonItemStylePlain

                                                                       target:self

                                                                       action:@selector(backButtonAction)];

    self.navigationBar.items =@[self.titleItem];

    

}


- (void)backButtonAction

{

    [self.navigationControllerpopViewControllerAnimated:YES];

}


@end



你可能会遇到以下问题,我就帮人帮到底,送佛送到西,一并帮你解决了,不谢!

/**

 *  关于导航栏

 1.如需自定义导航栏,控制器继承自LEOBaseNavigationController,主要处理导航栏事宜。父类控制器不会主动调用setupNavigationBar方法。子类重载setupNavigationBar方法,调用super方法后,默认会有一个白色的左边有返回按钮的导航栏。

 2.如需更改导航栏颜色,请在子类方法中添加代码self.navigationBar.barTintColor = [UIColor greenColor];相应的title颜色如需更改,添加代码self.navigationBar.titleTextAttributes = @{NSForegroundColorAttributeName: [UIColor greenColor]};

 3.如需添加导航栏底部的一根线,添加代码

 UIView *dividerLine = [[UIView alloc] initWithFrame:CGRectMake(0, 63, SCREEN_WIDTH, 1)];

 dividerLine.backgroundColor = HHColorWithAlpha(0, 0, 0, 0.2);

 [self.navigationBar addSubview:dividerLine];

 4.如果想要添加导航栏右边的按钮,添加代码

 self.titleItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"Information-Icon"] style:UIBarButtonItemStyleBordered target:self                                                                     action:@selector(vidgetGuideBtnDidClicked)];相应的点击事件自行处理

 5.如果想要在返回按钮的点击事件中处理一些事物,重载backButtonAction方法,最后调用super方法

 6.如果要动态改变左右按钮的图片或文字或点击事件,示例如下:

 self.titleItem.leftBarButtonItem.image = [UIImage imageNamed:@"Information-Icon"];

 self.titleItem.leftBarButtonItem.title = @"fuck";

 self.titleItem.leftBarButtonItem.action = @selector(backButtonAction);

 7.如果遇到图片被自动渲染成其他颜色,请尝试如下修改

 UIImage *image = [UIImage imageNamed:@"Information-Icon"];

 self.titleItem.leftBarButtonItem.image = [image imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];

 8.Controller内部的view frame64开始,因为导航栏属于控制器。

 9.如需更改title文字,请添加代码

 self.titleItem.title = NSLocalizedString(@"device monitor Bettery Percentage", nil);

 self.titleItem.titleView;


 */



这篇关于自定义导航栏,系统导航栏一堆bug的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/843800

相关文章

Linux系统中查询JDK安装目录的几种常用方法

《Linux系统中查询JDK安装目录的几种常用方法》:本文主要介绍Linux系统中查询JDK安装目录的几种常用方法,方法分别是通过update-alternatives、Java命令、环境变量及目... 目录方法 1:通过update-alternatives查询(推荐)方法 2:检查所有已安装的 JDK方

springboot自定义注解RateLimiter限流注解技术文档详解

《springboot自定义注解RateLimiter限流注解技术文档详解》文章介绍了限流技术的概念、作用及实现方式,通过SpringAOP拦截方法、缓存存储计数器,结合注解、枚举、异常类等核心组件,... 目录什么是限流系统架构核心组件详解1. 限流注解 (@RateLimiter)2. 限流类型枚举 (

Linux系统之lvcreate命令使用解读

《Linux系统之lvcreate命令使用解读》lvcreate是LVM中创建逻辑卷的核心命令,支持线性、条带化、RAID、镜像、快照、瘦池和缓存池等多种类型,实现灵活存储资源管理,需注意空间分配、R... 目录lvcreate命令详解一、命令概述二、语法格式三、核心功能四、选项详解五、使用示例1. 创建逻

SpringBoot 异常处理/自定义格式校验的问题实例详解

《SpringBoot异常处理/自定义格式校验的问题实例详解》文章探讨SpringBoot中自定义注解校验问题,区分参数级与类级约束触发的异常类型,建议通过@RestControllerAdvice... 目录1. 问题简要描述2. 异常触发1) 参数级别约束2) 类级别约束3. 异常处理1) 字段级别约束

使用Python构建一个高效的日志处理系统

《使用Python构建一个高效的日志处理系统》这篇文章主要为大家详细讲解了如何使用Python开发一个专业的日志分析工具,能够自动化处理、分析和可视化各类日志文件,大幅提升运维效率,需要的可以了解下... 目录环境准备工具功能概述完整代码实现代码深度解析1. 类设计与初始化2. 日志解析核心逻辑3. 文件处

golang程序打包成脚本部署到Linux系统方式

《golang程序打包成脚本部署到Linux系统方式》Golang程序通过本地编译(设置GOOS为linux生成无后缀二进制文件),上传至Linux服务器后赋权执行,使用nohup命令实现后台运行,完... 目录本地编译golang程序上传Golang二进制文件到linux服务器总结本地编译Golang程序

SpringBoot+EasyExcel实现自定义复杂样式导入导出

《SpringBoot+EasyExcel实现自定义复杂样式导入导出》这篇文章主要为大家详细介绍了SpringBoot如何结果EasyExcel实现自定义复杂样式导入导出功能,文中的示例代码讲解详细,... 目录安装处理自定义导出复杂场景1、列不固定,动态列2、动态下拉3、自定义锁定行/列,添加密码4、合并

Linux系统性能检测命令详解

《Linux系统性能检测命令详解》本文介绍了Linux系统常用的监控命令(如top、vmstat、iostat、htop等)及其参数功能,涵盖进程状态、内存使用、磁盘I/O、系统负载等多维度资源监控,... 目录toppsuptimevmstatIOStatiotopslabtophtopdstatnmon

Java实现自定义table宽高的示例代码

《Java实现自定义table宽高的示例代码》在桌面应用、管理系统乃至报表工具中,表格(JTable)作为最常用的数据展示组件,不仅承载对数据的增删改查,还需要配合布局与视觉需求,而JavaSwing... 目录一、项目背景详细介绍二、项目需求详细介绍三、相关技术详细介绍四、实现思路详细介绍五、完整实现代码

一文详解Java Stream的sorted自定义排序

《一文详解JavaStream的sorted自定义排序》Javastream中的sorted方法是用于对流中的元素进行排序的方法,它可以接受一个comparator参数,用于指定排序规则,sorte... 目录一、sorted 操作的基础原理二、自定义排序的实现方式1. Comparator 接口的 Lam