iOS 导航条isTranslucent几个注意点(iOS11及iOS13的变化)

news/2024/5/17 11:28:28/文章来源:https://blog.csdn.net/fengsh998/article/details/128947660

文章主要针对11及13之后的导航变化进行总结,主要是设置透明度时对转场,包括标题,背景透明,图片,颜色等设置的影响。

每一个iOS版本的发布苹果最不稳写的可能就数这个导航条了吧,改了又改。

因此isTranslucent一套UI风格中用同一种属性实现,不要部份true部份false。

以NavigationBar的左上角(x,y)对齐屏幕(0,0)作为参考点

条件:

1、VC设置半透明为true时 (self.navigationController?.navigationBar.isTranslucent),APP默认情况下为True

 

可以看到导航条半透明度毛玻璃效果穿透看到背景。ViewController中的View的(x,y)对齐屏幕(0,0) 

2、VC设置半透明属性为False时。

可以看到导航条不能穿透看不到背景。ViewController中的View的(x,y)不对齐屏幕 (0,0)

iOS11中引入safearea来解决由于isTranslucent属性引起来的偏移问题。

1、正常的UIView非UIScrollView子类在布局时使用安全区域和不使用安全区域带来的影响。

不使用safearea的情况:

class DemoViewController: UIViewController {var radiusView = UIView()override func viewDidLoad() {super.viewDidLoad()self.view.backgroundColor = .green//        self.navigationController?.navigationBar.isTranslucent = falseview.addSubview(radiusView)radiusView.backgroundColor = .orangeradiusView.layer.cornerRadius = 40radiusView.clipsToBounds = trueradiusView.snp.makeConstraints { (make) inmake.top.equalTo(10) //这里不使用安全区域make.width.height.equalTo(80)make.centerX.equalToSuperview()}}
}

 关闭半透明时效果。(isTranslucent = false)

 重点来了iOS11引入了安全区。来看下效果。不受isTranslucent属性的景响。

class DemoViewController: UIViewController {var radiusView = UIView()override func viewDidLoad() {super.viewDidLoad()// Do any additional setup after loading the view.self.view.backgroundColor = .green///这里设置true或false不影响self.navigationController?.navigationBar.isTranslucent = falseview.addSubview(radiusView)radiusView.backgroundColor = .orangeradiusView.layer.cornerRadius = 40radiusView.clipsToBounds = trueradiusView.snp.makeConstraints { (make) inif #available(iOS 11.0, *) {make.top.equalTo(view.safeAreaLayoutGuide.snp.top).offset(10) //使用安全区} else {make.top.equalTo(10) //不使用安全区}make.width.height.equalTo(80)make.centerX.equalToSuperview()}}
}

设置透明时:

 

设置不透时时:

 

 

可以看到11之后使用安全区的效果明显的爽歪歪。不需要再为透明半透明的事烦恼。

那什么情况下需要设计半透明或不透明效果呢。建议11以后的app都使用半透明属性来设计UI。

在半透明开启情况下ScrollView的使用情况 

 默认情况下不设置以下代码时,是完全适配安全区的。

if #available(iOS 11.0, *) {//.never 用于处理如果导航条半透明状态下tableview的内容偏移度问题tableView.contentInsetAdjustmentBehavior = UIScrollView.ContentInsetAdjustmentBehavior.never 
} else {self.automaticallyAdjustsScrollViewInsets = false
}

在不使用上述代码的情况下,在导航条设置透明或不透时,tableview或scrollview的左上解座标都能自动适应显示。

但如果开启之后,就可以看到偏移的效果。这一样来,有些tableview特别是新闻类的,想在滚动的时候能透过导航看到模糊效果。

ScrollView和TableView

针对VC中使用ScorllView或TableView时。谨慎根据UI需求进行设置使用。绿色条为正常显示的内容。主要考察是否被导航条或下面的tabbar拦住的情况。

样式一:
默认条件:
self.navigationController?.navigationBar.isTranslucent = true
...
view.addSubview(scrollview)
scrollview.snp.makeConstraints { (make) inmake.edges.equalTo(0) ///设置充满
}
其它均不设置

 

 

 scrollview的在contentview能正常在安全区间内显示。即不会被navigationbar或tabbar拦到拖不动。

样式二:
默认条件:
self.navigationController?.navigationBar.isTranslucent = false
...
view.addSubview(scrollview)
scrollview.snp.makeConstraints { (make) inmake.edges.equalTo(0) ///设置充满
}
其它均不设置

 

 

这个配置会使透航条不透时,但并没景响安全区内容的显示。 

样式三:self.navigationController?.navigationBar.isTranslucent = true
...
view.addSubview(scrollview)
scrollview.snp.makeConstraints { (make) inmake.edges.equalTo(0) ///设置充满
}///增加scrollview不自动适配
self.scrollview.contentInsetAdjustmentBehavior = UIScrollView.ContentInsetAdjustmentBehavior.never

 

 

 可以看到scrollview内容的上下都被挡住了。

样式四:self.navigationController?.navigationBar.isTranslucent = false
...
view.addSubview(scrollview)
scrollview.snp.makeConstraints { (make) inmake.edges.equalTo(0) ///设置充满
}///增加scrollview不自动适配
self.scrollview.contentInsetAdjustmentBehavior = UIScrollView.ContentInsetAdjustmentBehavior.never

 

和样式三差不多,只是上部份不被挡到了。下面部份仍然是被挡住。

样式五:self.navigationController?.navigationBar.isTranslucent = falsescrollview.snp.makeConstraints { (make) inif #available(iOS 11.0, *) {//使用安全区上下对齐的方式make.top.equalTo(view.safeAreaLayoutGuide.snp.top)make.bottom.equalTo(view.safeAreaLayoutGuide.snp.bottom)make.leading.trailing.equalTo(0)} else {}
}

 ​​​​​​​

下面是self.navigationController?.navigationBar.isTranslucent = true的样式

 

 

样式六:self.navigationController?.navigationBar.isTranslucent = falsescrollview.snp.makeConstraints { (make) inif #available(iOS 11.0, *) {//使用安全区上下对齐的方式make.top.equalTo(view.safeAreaLayoutGuide.snp.top)make.bottom.equalTo(view.safeAreaLayoutGuide.snp.bottom)make.leading.trailing.equalTo(0)} else {}
}///增加scrollview不自动适配
self.scrollview.contentInsetAdjustmentBehavior = UIScrollView.ContentInsetAdjustmentBehavior.never

 

此效果和样式五一样。

因此scrollview设置了安全区对齐的情况下,无论isTranslucent如何设置都能正常显示出contentview内容。也不受contentInsetAdjustmentBehavior的影响。因此在UI设的时候特别是需要用scrollview或tableview的布局时,就需要针对不同的样式做不同的选择。

isTransluucent = true,还是没有启作用,没有顶到(0,0)点,可能是有地方设置了:

if self.responds(to: #selector(setter: edgesForExtendedLayout)) {self.edgesForExtendedLayout = []
}

另IOS13以上 来设置导航透明

if #available(iOS 13.0, *) {//注意这个是全局影响的,不要在想要的地方就任意修改let appearance = UINavigationBarAppearance()appearance.configureWithOpaqueBackground()appearance.backgroundColor = .clearappearance.shadowColor = .clearnavigationController?.navigationBar.scrollEdgeAppearance = appearancenavigationController?.navigationBar.standardAppearance = appearance} else {self.navigationController?.navigationBar.setBackgroundImage(UIImage(),for: .default)self.navigationController?.navigationBar.shadowImage = UIImage()}

正在上传…

重新上传

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_255599.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

为什么微博签到数据如此受欢迎?

随着互联网的发展,人们在新浪微博、Twitter、Facebook、等社交媒体的网络社交活动也越来越活跃。就新浪微博而言,2023年春晚期间活跃用户3亿左右。 由于我国网民群体庞大、网络社交活动不受地域限制、话题自由开放等特点,使得微博签到数据能…

拦截器interceptor总结

拦截器一. 概念拦截器和AOP的区别:拦截器和过滤器的区别:二. 入门案例2.1 定义拦截器bean2.2 定义配置类2.3 执行流程2.4 简化配置类到SpringMvcConfig中一. 概念 引入: 消息从浏览器发送到后端,请求会先到达Tocmat服务器&#x…

56 门控循环单元(GRU)【动手学深度学习v2】

56 门控循环单元(GRU)【动手学深度学习v2】 深度学习学习笔记 学习视频:https://www.bilibili.com/video/BV1mf4y157N2/?spm_id_fromautoNext&vd_source75dce036dc8244310435eaf03de4e330 门控循环单元GRU GRU和LSTM 实际上效果差不多。…

国家政策鼓励使用电子保函和银行函证,君子签助推函证数字化建设

近日,国家发改委发文,推动电子保函应用,降低电子保函费用;财政部会同银保监会发文,开展数字化函证,有效提升函证效率和效果。政策的出台有助于加快推进普及电子函证应用。 发改委:鼓励使用电子…

Java基础-多线程juc

1.实现多线程 1.1简单了解多线程【理解】 是指从软件或者硬件上实现多个线程并发执行的技术。 具有多线程能力的计算机因有硬件支持而能够在同一时间执行多个线程,提升性能。 1.2并发和并行【理解】 并行:在同一时刻,有多个指令在多个CPU上…

DataFrame与Spark SQL的由来

文章目录DataFrame与Spark SQL的由来RDD 之殇:优化空间受限DataFrame 横空出世幕后英雄:Spark SQL基于 DataFrame,Spark SQL 是如何进行优化的Catalyst 优化器TungstenDataFrame与Spark SQL的由来 Spark 已经有了 RDD 这个开发入口&#xff…

SSJ-21A AC220V静态【时间继电器】

系列型号: SSJ-11B静态时间继电器;SSJ-21B静态时间继电器 SSJ-21A静态时间继电器;SSJ-22A静态时间继电器 SSJ-22B静态时间继电器SSJ-42B静态时间继电器 SSJ-42A静态时间继电器SSJ-41A静态时间继电器 SSJ-41B静态时间继电器SSJ-32B静态时间继电…

MySQL架构图

MySQL架构图 Mysql逻辑架构图主要分三层: 1) 第一层负责连接处理,授权认证,安全等等 每个客户端连接都会在服务器进程中拥有一个线程,服务器维护了一个线程池,因此不需要为每一个新建的连接创建或者销毁线程。 当客户…

不用U盘 重装系统(别再浪费钱去电脑城装系统了)

不用U盘 重装系统(别再浪费钱去电脑城装系统了) 首先打开浏览器,搜索MSDN回车,选择第一个网站 点击操作系统 往下拉找到win10专业版 选择(business editions)和 (x64) 打开迅雷,点击新建&a…

Java --- Integer.parseInt()

parseInt() 方法是java.lang 包下Integer 类的一个方法。 Java Integer parseInt() 方法共有三种不同类型,可以根据其参数进行区分。 用法: 以下是 parseInt() 方法的声明: public static int parseInt (String s) public static int parseInt (Strin…

暗月内网渗透实战——项目七

首先环境配置 VMware的网络配置图 环境拓扑图 开始渗透 信息收集 使用kali扫描一下靶机的IP地址 靶机IP:192.168.0.114 攻击机IP:192.168.0.109 获取到了ip地址之后,我们扫描一下靶机开放的端口 靶机开放了21,80,999,3389,5985,6588端口…

ChatGpt,普通人如何做到年薪 50 万

国内使用ChatGpt的方式汇总,2023 年 2 月 8 号,亲测可用 最近,ChatGpt 很火,身边的人都在讨论,会不会成为下一个风口,想前几年互联网一样,迎来井喷式的发展。 小徐我也是在关注,这…

pycharm的terminal与Project interpreter 配置环境不一致的问题

考虑自己的项目名中是否出现了中文,我是因为这个原因导致Terminal 前面出现了PS,用第2条解决切换终端环境后还是安装包不一致。终端出现PS,考虑在settings中搜索找到Terminal,修改其Shell path为cmd.exe,关闭重新打开T…

PGL 系列(七)metapath2vec

metapath2vec 基于meta-path的random walks来构建每个顶点的异构邻域,然后用Skip-Gram模型来完成顶点的嵌入。

中国大学mooc 机器人操作系统讲义以及部分笔记

这里写目录标题二进制与源码包1.7 安装RoboWare Studio新的连接配套代码 官方看了一下课程官方的讲义连接,似乎很多页面已经丢失?或者是未授权?二进制与源码包 https://sychaichangkun.gitbooks.io/ros-tutorial-icourse163/content/chapter…

复习0206

目录 一、访问修饰符 一、权限范围 二、注意事项 二、封装(面向对象的三大特征之一) 一、封装的好处 二、封装的实现步骤 三、和构造器结合 四、练习题中的细节 一、访问修饰符 一、权限范围 访问修饰符用于控制方法和属性(成员变量…

MyBatis基础知识

1 JDBC基础知识1.1 JDBC简介JDBC是使用Java语言操作关系型数据库的一套API,全称Java DataBase Connectivity,Java数据库连接。JDBC定义了操作所有关系型数据库的规则,同一套Java代码可以操作不同的关系型数据库。也就是JDBC是Java语言操作数据…

2023年rabbitMq面试题汇总4(7道)

一、如何保证消息的顺序性?1. 通过某种算法,将需要保持先后顺序的消息放到同⼀个消息队列中(kafka中就是partition,rabbitMq中就是queue)。然后只⽤⼀个消费者去消费该队列。2. 可以在消息体内添加全局有序标识来实现。二、使⽤RabbitMQ增加rest服务吞吐…

一篇文章学懂C++和指针与链表

指针 目录 指针 C的指针学习 指针的基本概念 指针变量的定义和使用 指针的所占的内存空间 空指针和野指针 const修饰指针 指针和数组 指针和函数 指针、数组、函数 接下来让我们开始进入学习吧! C的指针学习 指针的基本概念 指针的作用:可…

【Python】Python学习笔记(二)基本输入输出

Python娘来源:https://next.rikunabi.com/tech/docs/ct_s03600.jsp?p002412 目录print()函数不进行自动换行的print()函数打印输出多个字符串只进行换行input()函数使用format方法格式化字符串字符串与数值转换字符串转换为数值数值转换为字符串总结参考资料print(…