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

news2024/11/24 16:47:03

文章主要针对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 = false
        
        view.addSubview(radiusView)
        radiusView.backgroundColor = .orange
        radiusView.layer.cornerRadius = 40
        radiusView.clipsToBounds = true
        
        radiusView.snp.makeConstraints { (make) in
            make.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 = false
        
        view.addSubview(radiusView)
        radiusView.backgroundColor = .orange
        radiusView.layer.cornerRadius = 40
        radiusView.clipsToBounds = true
        
        radiusView.snp.makeConstraints { (make) in
            if #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) in
	make.edges.equalTo(0) ///设置充满
}
其它均不设置

 

 

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

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

 

 

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

样式三:

self.navigationController?.navigationBar.isTranslucent = true
...
view.addSubview(scrollview)
scrollview.snp.makeConstraints { (make) in
	make.edges.equalTo(0) ///设置充满
}

///增加scrollview不自动适配
self.scrollview.contentInsetAdjustmentBehavior = UIScrollView.ContentInsetAdjustmentBehavior.never

 

 

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

样式四:

self.navigationController?.navigationBar.isTranslucent = false
...
view.addSubview(scrollview)
scrollview.snp.makeConstraints { (make) in
	make.edges.equalTo(0) ///设置充满
}

///增加scrollview不自动适配
self.scrollview.contentInsetAdjustmentBehavior = UIScrollView.ContentInsetAdjustmentBehavior.never

 

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

样式五:

self.navigationController?.navigationBar.isTranslucent = false

scrollview.snp.makeConstraints { (make) in
    if #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 = false

scrollview.snp.makeConstraints { (make) in
    if #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 = .clear
            appearance.shadowColor = .clear
            navigationController?.navigationBar.scrollEdgeAppearance = appearance
            navigationController?.navigationBar.standardAppearance = appearance
        } else {
            self.navigationController?.navigationBar.setBackgroundImage(UIImage(),for: .default)
            self.navigationController?.navigationBar.shadowImage = UIImage()
        }

正在上传…

重新上传

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Prometheus监控Java-JMX

一、什么是 JMX Exporter ? JMX Exporter 利用 Java 的 JMX 机制来读取 JVM 运行时的一些监控数据,然后将其转换为 Prometheus 所认知的 metrics 格式,以便让 Prometheus 对其进行监控采集。 那么,JMX 又是什么呢?它的全称是&a…

【Redis场景4】单机环境下秒杀问题

单机环境下的秒杀问题 秒杀下单功能及并发测试 完整代码GitHub:https://github.com/xbhog/hm-dianping/tree/20230130-xbhog-redisSpike 秒杀条件分析: 秒杀是否开始或结束,如果尚未开始或已经结束则无法下单库存是否充足,不足…

【体验测评】ChatGDP

前言 今天在去打针之前测试了下比较火的ChatGPT,总得来说还是比较好用的,尤其是跟浏览器搭配可以当摘要看,然后再进行细化查阅。 ​针对可以写论文跟交作业,我觉得查重率这一关比较麻烦,不现实,尤其是参与人增多的时…

php宝塔搭建部署实战易优养殖基地网站源码

大家好啊,我是测评君,欢迎来到web测评。 本期给大家带来一套php开发的易优养殖基地网站源码,感兴趣的朋友可以自行下载学习。 技术架构 PHP7.2 nginx mysql5.7 JS CSS HTMLcnetos7以上 宝塔面板 文字搭建教程 下载源码,宝…

选择游戏开发工具的原则

本文首发于微信公众号: 小蚂蚁教你做游戏。欢迎关注领取更多学习做游戏的原创教程资料,每天学点儿游戏开发知识。嗨!大家好,我是小蚂蚁。昨天为了给我的精致1010游戏方便的增加更多关卡,我用 Unity 做了个关卡编辑器&a…

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

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

SpringCloud保姆级搭建教程三---Feign

1、第一点就是要明白服务与服务之间在怎么样的情况下,如何使用feign答:服务A要调用服务B的某个controller方法的时候,服务A就需要使用feign ,和服务B是没关系的所以,首先,在服务A中添加feign的依赖,我这里就…

nodejs基于vue高校图书馆座位预约系统

目录 1 绪论 1 1.1课题背景 1 1.2课题研究现状 1 1.3初步设计方法与实施方案 2 1.4本文研究内容 2 2 系统开发环境 4 2.1 使用工具简介 4 2.2 环境配置 4 2.3 B/S结构简介 4 2.4 MySQL数据库 5 2.5 框架介绍 5 3 系统分析 63.1系统可行性分析 6 3.1.1经济可行性 6 3.1.2技术可行…

软件测试电商项目实战(写进简历没问题)

前言 说实话,在找项目的过程中,我下载过(甚至付费下载过)N多个项目、联系过很多项目的作者,但是绝大部分项目,在我看来,并不适合你拿来练习,它们或多或少都存在着“问题”&#xff…

【i2c协议介绍】

文章目录协议简单介绍五种速度模式master/slave和transmitter/receiver关系第一种情况:master作为transmitter,slave作为receiver第二种情况:当master作为receiver,slave作为transmitteri2c基本信号start产生stop信号数据传输有效…

OpenAI ChatGPT 注册使用全攻略,以及常见问题解决办法

前言 这个时代,利用好 AI 完成自己的工作,放大自己的效率,已是一种必不可少的技能。 文章目录前言一、注册和登录二、常见问题和解决办法三、参考链接一、注册和登录 1)注册网址:https://chat.openai.com/auth/login …

8.数据库编程

梳理 名词解释 简答题 1.游标的使用步骤 ① 声明游标。 用DECLARE语句为一条SELECT语句定义游标 EXEC SQL DECLARE<游标名> CURSOR FOR <SELECT语句>;使用T-SQL语句生成一个结果集&#xff0c;并且定义游标的特征&#xff0c;如游标中的记录是否可以修改。 定…

《趣学算法》读书笔记

内容摘要 主要介绍我对本书的一些自我感觉比较亮点地方的总结。 第一章 算法 算法有两条线索&#xff0c;数据结构、算法策略。 算法特性 时间复杂度 常见算法时间复杂度 时间复杂度的渐进上界 渐进精确界 用渐进上界和渐进下界逼近&#xff0c; 空间复杂度 递归 递归包…

浅谈监控易运维系统在金融信创国产化中的使用

自2019年&#xff0c;国家明确信创产业将成为拉动经济发展的重要途径和崭新动能以来&#xff0c;全行业进入一个高速发展新阶段。此前倡导的“28”安全可控体系&#xff0c;其中在8大基础行业中,金融行业信创产品推广成为重中之重。金融行业信创&#xff0c;是为解决行业本质安…

ENVE5.3安装与汉化(一次性安装成功附安装包)

目录 1.安装包下载 2. 软件安装 3. ENVI5安装目录说明 1.安装包下载 链接&#xff1a;https://pan.baidu.com/s/1dp2ucQa3DMHLYpw239-_vA?pwd6944 提取码&#xff1a;6944 2. 软件安装 安装前注意事项&#xff1a; 安装全程断网&#xff1b;下载、解压和安装都应该在英文…

【电商】订单信息与状态流转

前言订单产生后&#xff0c;接下来会继续进行一系列流转&#xff0c;最后送到用户手里。在每个环节都有对应的操作&#xff0c;数据信息也要求其完成性&#xff0c;可以根据订单的每个状态变化&#xff0c;来计算分析&#xff0c;进而进行优化供应链路径&#xff0c;以提升订单…

三勾商城JAVA多商户配置发布

admin、shop、supplier端测试&#xff1a; 账号/密码均为admin/123456 后端vue目录 1、jjj_shop_multi_admin> 对应saas端&#xff0c;后台访问地址/admin。2、jjj_shop_multi_shop> 对应商城管理端&#xff0c;后台访问地址/shop。2、jjj_shop_multi_supplier> 对应供…

Linux---Kernal与Shell讲解

目录 Shell简介 什么是Shell Shell分类 内核Kernal Shell简介 什么是Shell 我们首先需要知道一台完整的计算机是由硬件组成的&#xff0c;而人不可以直接与硬件交互&#xff0c;为了完成交互&#xff0c;进行了以下的操作 将硬件设备交由内核管理&#xff0c;给硬件套个内…

【golang】1797. 设计一个验证系统

你需要设计一个包含验证码的验证系统。每一次验证中&#xff0c;用户会收到一个新的验证码&#xff0c;这个验证码在 currentTime 时刻之后 timeToLive 秒过期。如果验证码被更新了&#xff0c;那么它会在 currentTime &#xff08;可能与之前的 currentTime 不同&#xff09;时…

微信小程序开发你可能不知道的开发技巧

1. 页面级data&#xff0c;组件data的查看 页面级data的查看&#xff0c;很多开发者应该都知道&#xff1b;组件级的数据查看我是开发了大半年才发现的&#xff1b; 页面级的data查看&#xff1a; 组件的data查看&#xff1a; 2. 放大模拟器【调整一些UI细节】 效果&#x…