前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ios7之后导航栏的问题1

ios7之后导航栏的问题1

作者头像
用户1451823
发布2018-09-13 15:48:57
4180
发布2018-09-13 15:48:57
举报
文章被收录于专栏: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 删除。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档