原文地址 http://blog.sina.com.cn/s/blog_1410870560102wu9a.html

在iOS 7中,苹果引入了一个新的属性,叫做[UIViewController setEdgesForExtendedLayout:],它的默认值为UIRectEdgeAll。当你的容器是navigation controller时,默认的布局将从navigation bar的顶部开始。这就是为什么所有的UI元素都往上漂移了44pt。有时会加上顶部tool bar的高度 20, 20+44 = 64。而且下面tabbar也缩进的49

解决办法

- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
if (OSVersionIsAtLeastiOS7()) {
if ([self respondsToSelector:@selector(edgesForExtendedLayout)])
{
self.edgesForExtendedLayout = UIRectEdgeNone;
}
}
}
  • 如果设置成 self.edgesForExtendedLayout = UIRectEdgeBottom;那么就会self.view.frame是从navigationBar下面开始计算一直到屏幕底部;
  • 如果设置成 self.edgesForExtendedLayout = UIRectEdgeNone;那么就会self.view.frame是从navigationBar下面开始计算一直到屏幕tabBar上部;
  • 如果设置成 self.edgesForExtendedLayout = UIRectEdgeTop;那么就会self.view.frame是从navigationBar上面计算面开始计算一直到屏幕tabBar上部;

了解更多

  • iOS7以上系统,self.navigationController.navigationBar.translucent默认为YES,self.view.frame.origin.y从0开始(屏幕最上部)。

  • 此时若是添加代码self.edgesForExtendedLayout = UIRectEdgeNone(iOS7.0以后方法);self.view.frame.origin.y会下移64像素至navBar下方开始。但是此时当push到一个新的controller之前给当前屏幕截图的时候[self.view.layer renderInContext:UIGraphicsGetCurrentContext()];,由于navBar是透明的,会出现64像素的黑色区域。

  • 此时只需要把self.navigationController.navigationBar.translucent=NO即可,不需要加代码self.edgesForExtendedLayout;

  • iOS7之后也增加了一个self.tabBarController.tabBar.translucent的属性,默认为YES。当应用同时使用navBar和TabBar的时候。设置self.tabBarController.tabBar.translucent=NO并且self.navigationController.navigationBar.translucent=NO时候,得到self.view.frame--->{{0, 64}, {320, 455}}。视图的高度也改变为navBar和tabBar之间的455像素。当self.navigationController.navigationBar.translucent=YES并且self.tabBarController.tabBar.translucent=NO的时候self.view.frame--->{{0, 0}, {320, 519}};其都为YES的时候self.view.frame--->{{0, 0}, {320, 568}};

注意:设置self.edgesForExtendedLayout = UIRectEdgeNone;的时候会使得navBar和tabBar都不占空间。self.view.frame--->{{0, 64}, {320, 455}}。此时iOS7默认navBar和tabBar都是透明的。截图的时候需要注意。

最新文章

  1. React学习笔记-4-什么是生命周期
  2. CSS3中的变形与动画【转】
  3. DIY操作系统(引文)
  4. Shell编程基础教程4--控制流结构
  5. Retrieve失败解决办法一例
  6. 跨域资源共享 CORS
  7. Object学习笔记
  8. SQL2008无法连接到.\SQLEXPRESS,用户'sa'登录失败(错误18456)图文解决方法
  9. CODEVS1380 没有上司的舞会 (树形DP)
  10. Linux开机执行顺序
  11. 【USACO 3.1.1】最短网络
  12. Mongodb 安装迁移
  13. android_线
  14. Linux系统安装gcc/g++详细过程
  15. 9 个 Yoinkmac使用小技巧,提升你的 Mac 文档解决效率
  16. LwIP Application Developers Manual10---LwIP IPv4/IPv6 stacks
  17. java扫描文件夹下面的所有文件(递归与非递归实现)
  18. C++可继承的单例基类模板
  19. Ext ComboBox 动态查询
  20. IOS-适配iOS10以及Xcode8

热门文章

  1. 【开源GPS追踪】 之 为何费力不讨好
  2. BZOJ4963 : String
  3. 原生js实现清除子元素节点
  4. 数据结构 BM算法
  5. 解释Eclipse下Tomcat项目部署路径问题(.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps)
  6. 初次接触Jenkins遇到的几个问题
  7. keras用vgg16做图像分类
  8. java大数BinInteger
  9. Vue(九)小案例 - 百度搜索列表(跨域)
  10. hdu1847 Good Luck in CET-4 Everybody!(巴什博弈)