版权声明:本文为博主原创文章,未经博主允许不得转载。 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的一个分类中的方法:
{
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),谢谢阅读。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有