Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >ios7之后导航栏的问题1

ios7之后导航栏的问题1

作者头像
用户1451823
发布于 2018-09-13 07:48:57
发布于 2018-09-13 07:48:57
4370
举报
文章被收录于专栏:DannyHoo的专栏DannyHoo的专栏

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://cloud.tencent.com/developer/article/1337819

iOS7之后rootView(即根视图)的原点是(0,0),当根视图控制器是NavigationController的时候有时一些视图的原点却会发生一些变化,有时是(0,0),有时是(0,64),而我们设置的却一直是(0,0),这到底是为什么呢?下面就给读者解释一下(实际也是自己重新梳理一下)。

首先我们添加一个普通视图,设置其原点是(100,0),代码:

self.view.backgroundColor = UIColorgreenColor;

UIView * redV = [UIViewalloc initWithFrame:CGRectMake(100,0, 100,100)];

    redV.backgroundColor = UIColorredColor;

    self.viewaddSubview:redV;

此时的效果是:

我们看到红色视图的Y坐标为0,由此也能得出根视图的原点是(0,0)。我们也可以通过看视图调试器看到根视图的原点,如图:

然而当我设置一个属性之后,其他代码不变,我们会看到红色视图的位置发生了变化。设置属性代码:

self.navigationController.navigationBar.translucent = NO;

效果图:

此时我们看到红色视图的在navigationBar下方,即Y坐标为0。由此我们推断根视图的坐标原点发生了变化变成了(0,64),我们同样可以同时视图调试器看到,如图:

出了根视图的坐标原点发生变化外,我们还发现navigationBar的透明度发生了变化,注意观察上面的效果图。

上面设置属性的代码是设置navigationBar的透明属性translucent,此属性默认是YES,我们也看到在默认状态下navigationBar是有透明度的,当设置此属性为NO时,navigationBar不再透明。如果我们设置了此属性为NO,那么根视图的原点坐标就会变成(0,64)。

有些读者会疑问,我没有设置这个属性可为什么我的根视图的坐标原点还是(0,64)?那可能是你设置了navigationBar的颜色。我所说的设置navigationBar的颜色不是通过setBackgroundColor这个方法,因为这个方法设置的颜色并不是我们想要的颜色,比如我们想设置navigationBar的颜色为纯绿色,如果直接使用setBackgroundColor方法,得到效果图是这样:

我们需要通过setBackgroundImage这个方法来设置navigationBar的颜色,如果我们利用此方法设置了的navigationBar的image同样会出现根视图坐标原点变成(0,64)的问题。下面先说一下怎么利用setBackgroundImage方法设置navigationBar的颜色。

代码:

[self.navigationController.navigationBarsetBackgroundImage:[UIImageimageWithColor: UIColorcolorWithRed:288/255.0green:0/255.0blue:0/255.0alpha:1 size:CGSizeMake(1,1)]forBarMetrics:UIBarMetricsDefault];

这里有一个imageWithColor的方法,这个UIImage的一个分类中的方法:

  • (UIImage *)imageWithColor:(UIColor *)color size:(CGSize)size

{

CGRect rect =CGRectMake(0,0, size.width, size.height);

UIGraphicsBeginImageContext(rect.size);

CGContextRef context =UIGraphicsGetCurrentContext();

CGContextSetFillColorWithColor(context,color.CGColor);

CGContextFillRect(context, rect);

UIImage *img =UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

return img;

}

看效果图:

因为我们设置了navigationBar的颜色(或背景图),那么在设置之后navigationBar的透明度就发生了变化,从而我们即使不设置navigationBar的translucent属性,navigationBar的透明度也发生了变化从而导致根视图的坐标原点发生变化。如果我们在设置navigationBar的颜色后还想要根视图的坐标原点不变,那么我们可以在设置颜色的时候给它一个透明度,那么此时navigationBar的translucent属性同样为YES即默认值,这样根视图的坐标原点就不会发生变化了。看效果:

本篇博客内容可能有点多了,有些读者可能不耐烦了,好,那本篇博客就此结束,如果想看更多内容请看另一篇博客(http://blog.csdn.net/u010105969/article/details/53334755),谢谢阅读。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016年11月25日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
iOS状态栏设置
这两种方式是根据UIViewControllerBasedStatusBarAppearance也就是View controller-based status bar appearance的值的不同有相应的设置
码客说
2019/10/22
2.8K0
iOS开发UINavigation系列一——导航栏UINavigtionBar
        在iOS开发中,我们通常会使用导航控制器,导航控制器中封装了一个UINavigationBar,实际上,我们也可以在不使用导航控制器的前提下,单独使用导航栏,在UINavigationBar中,也有许多我们可以定制的属性,用起来十分方便。
珲少
2018/08/15
1.2K0
iOS开发UINavigation系列一——导航栏UINavigtionBar
实践-小效果 Ⅰ
一些小的功能点,虽然很小,但是里面有些弯,值得注意。(同系列文章会持续更新.......)
進无尽
2018/09/12
1.2K0
实践-小效果 Ⅰ
NavigationBar&tabBar调色那些事儿1. 导航栏调色那些事儿2. 标签栏TableBar那些事儿
Paste_Image.png 1. 导航栏调色那些事儿 小规律: 要设置内容,全找item 要修改颜色及文字属性,找bar 1.1 改变 NavigationBar 的背景颜色 [UINavigationBar appearance].barTintColor = [UIColor blueColor]; //如果使用的是backgroundColor,就会自带毛玻璃效果 self.navigationBar.backgroundColor = [UIcolor blueColor]; 1.2 改变 Na
stanbai
2018/06/28
1.5K0
iOS常用代码段
控制器中代码设置 > storybord设置 > 全局设置 优先级高的会覆盖优先级低的配置,比如storybord中的设置了navigationbar的样式 那么全局设置就不生效
码客说
2019/10/22
7890
iOS状态栏使用总结
目录: 一、状态栏与导航栏 二、设置状态栏显隐与字体样式 三、设置状态栏背景色 四、启动页隐藏状态栏 五、状态栏、导航栏相关的常用宏定义 相关文章:iOS导航栏的使用总结 一、状态栏与导航栏 状态栏:显示时间、电池等信息 导航栏:显示app页面标题,返回按钮等 iOS7之前:状态栏与导航栏是分开的; iOS7之后:状态栏与导航栏合在一起;导航部分总高度(64)= 状态栏高度(20) +导航栏内容高度((44) iPhoneX设备出现以后,状态栏的高度变为44,导航栏部分总高度(88) = 状态栏
梧雨北辰
2018/07/06
1.9K0
iOS-UIButton设置高亮状态下的背景色
UIButton一般分为高亮的普通两种状态,原生的方法可以设置这两种不同状态下的文字颜色,文字内容,背景图片,按钮图片。但是不能设置按钮的背景色。
Lee坚武
2019/12/13
1.8K0
ios7之后导航栏的问题2
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010105969/article/details/53334755
用户1451823
2018/09/13
8530
ios7之后导航栏的问题2
iOS开发中去掉navigationBar下方的横线
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010105969/article/details/78964218
用户1451823
2018/09/13
1.1K0
iOS开发中去掉navigationBar下方的横线
iOS TabBar 轮子
今天在GitHub上找了一个TabBar的轮子,Star 6.5k还不错,日常开发已经够用了,设置图片,选中图片,文本颜色,选中文本颜色,数字角标,选中动画,中间凸起按钮都有,日常开发已经够用了。具体可以去GitHub上看文档。 CYLTabBarController 自己写的Demo
赵哥窟
2021/12/16
1.1K0
iOS TabBar 轮子
iOS导航栏基础效果配置[通俗易懂]
若iOS7之后仍要使用第一种方法全局设置,则需要在plist文件中添加View controller-based status bar appearance 字段,值为NO ,意为不使用控制器管理状态栏。
全栈程序员站长
2022/07/21
1.6K0
UINavigationBar的用法
UINavigationBar是一个我们在开发中必定会碰到的控件,用好它能帮助我们自定义导航栏的样式,所以今天讲解一下UINavigationBar的用法。
Originalee
2018/08/30
2K0
iOS系统中导航栏的转场解决方案与最佳实践
目前,开源社区和业界内已经存在一些 iOS 导航栏转场的解决方案,但对于历史包袱沉重的美团 App 而言,这些解决方案并不完美。有的方案不能满足复杂的页面跳转场景,有的方案迁移成本较大,为此我们提出了一套解决方案并开发了相应的转场库,目前该转场库已经成为美团点评多个 App 的基础组件之一。
美团技术团队
2019/03/22
2.4K0
iOS系统中导航栏的转场解决方案与最佳实践
iOS 15导航栏设置
使用Xcode 13.0运行项目到iOS 15的手机上,出现导航栏黑色。但是在低版本Xcode 运行到手机就没有问题。
莫空9081
2021/09/03
1.9K0
常用开发技巧系列(一)
前言:         在我们iOS开发的过程中,你要是知道一些特别的小技巧的话,其实是可以帮你省很多事的,当然这东西也不需要我们专门去记,估计没有几个开发人员喜欢死记硬背,有需要,上网找,边学边用才是技巧的正确的打开方式。毕竟,这东西也是一个随着时间去积累总结的一个过程。这里总结了一些平时积累到的一些开发的小技巧,其实有一些要是碰不到那个问题我也记不起来,所以打算一直更新下去,把碰到的小技巧一点点的都总结起来,把它最后做成一个系列。你要有什么好的,欢迎在下面评论里展示出来给大家看,大家相互学习。 一:给凡
Mr.RisingSun
2018/01/12
8920
常用开发技巧系列(一)
【iOS开发-22】navigationBar导航栏,navigationItem建立:获取导航栏中的基本文本和button以及各种跳跃
(1)navigationBar导航栏可以被看作是self.navigationController一个属性导航控制器,它可以由点直接表示self.navigationController.navigationBar。当然navigationBar他还是很物业。让我们风格barStyle、背景backgroundColor、frame属性(能够获取宽高这些信息)。还能够用setBackgroundImage方法设置背景图片。当然图片多了能够使用clipsToBounds剪裁。
全栈程序员站长
2022/07/06
2.4K0
【iOS开发-22】navigationBar导航栏,navigationItem建立:获取导航栏中的基本文本和button以及各种跳跃
【IOS开发基础系列】Navigation页面导航专题
        对于父级VC与子级VC分别有navigationController的情况,即不是使用push方式加载子VC,而是通过AddChildViewController的方式添加的场景,则父级导航条会覆盖在子级导航条上面,所以需要在载入时把父级导航条做隐藏处理:
江中散人_Jun
2023/10/16
4720
【IOS开发基础系列】Navigation页面导航专题
iOS透明导航栏的平滑过渡(进阶版)引实现过程结
如我在传送门:iOS导航栏切换界面时隐藏和显示中所说,现在很多App的个人中心模块都是不保留导航栏的,会直接使导航栏透明,比如做的很好的QQ个人信息界面:
Cloudox
2021/11/23
3.2K0
iOS透明导航栏的平滑过渡(进阶版)引实现过程结
视图的alpha属性可能会影响子视图的透明度
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010105969/article/details/53037832
用户1451823
2018/09/13
9460
视图的alpha属性可能会影响子视图的透明度
导航栏的设置 背景 线
一、设置导航栏底线 简单获取底线 - (UIView *)navLine { if (!_navLine) { UIView *backgroundView = [self.navigationController.navigationBar subviews].firstObject; _navLine = backgroundView.subviews.firstObject; } return _navLine; } 2.单个页面
developerbfl
2018/06/05
1.2K0
相关推荐
iOS状态栏设置
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文