图文讲解如何解决App的iOS 7顶部状态栏适配问题
首先说明下,ios7中,由于status bar不再占用单独的20px,如果app需要同时支持ios7和ios6.1以下,那就需要适配下了,适配开始:
先看用xcode新建项目后 IOS7和IOS6上的的运行效果:
ps:一个empty application 里面+了一个rootcontroller,作为window的根控制器,view里面放了一个tableview;
是不是遇到的IOS7的新问题,状态栏跟tableview重叠了,OK,看见这个不想看到的结果,下面我们就开始正式的解决掉这个招人不喜欢的效果。
第一步:不要勾选xib中的Use Autolayout,如下图:
第二步:第二步:选择View as “ios6.1 and Earlier”,还是上图位置处;
第三步:在Size Inspector中,有一ios6/7 Deltas:分别表示在PosX的增量、PosY的增量、宽度增量、高度增量。
ps:在“ios6.1 and Earlier”模式下,由于status bar的高度为20,所以当app运行在ios7.0模式下时,需要view向下移动20像素,因此在ΔY上设置为20.
tableView坐标向下移动了20,由于整个屏幕的高度是不变的,所以在“ios7.0 and Later”模式下,需要将tableView的高度减去20像素,即在“ios6.1 and Earlier”模式下,设置tableView的ΔHeight为 -20。如果不设置ΔHeight,tableView底部会有20像素是不可见的,可以测试demo看看。
***注***:Δ,正数表示增,负数表示减。
第四步:ok,设置完成,到IOS上看效果:
是不是神奇的发现跟以前的有似曾相识的赶脚呢。。。这样“ios6.1 and Earlier”和“ios7.0 and Later” UI布局便统一了。
另一种方法
上面通过XIB的设置达到了状态栏和view重合的问题,接下来我们讲一讲网传的修改window frame方法。
先上步骤:
第一:在appdeletage里面 添加如下代码:
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) { self.window.frame = CGRectMake(0.0f,20.0f,self.window.frame.size.width,self.window.frame.size.height-20.0f); }
2.在info.plist文件里面 属性:View controller-based status bar appearance 值设为NO。
下面看效果:
在看下图,你会发现一个问题:
这是什么原因导致的呢?我发现,由于window你又548变成了528吧,但是你发现tableview的高度还是548,导致了有20个像素不能显示。那有的同学会说,直接改成528不就得了么,是的,可以改,改后你发现IOS7上确实没有了缺像素的问题,但是在IOS6有直接缺半截,看下图:
所以呢,由我亲自测试,这种方法想要适配IOS7和IOS6有点不太靠谱。
最后解释一下几个名词设置的作用:
- (UIStatusBarStyle)preferredStatusBarStyle { return UIStatusBarStyleLightContent; } - (BOOL)prefersStatusBarHidden { return NO; }
在plist中设置View controller-based status bar appearance 值设为YES..
这些的作用是:基于controller,动态控制statusbar的隐藏与样式。
相关推荐
-
深入理解iOS的状态栏
一.状态栏的隐藏 状态栏的隐藏主要有两种方法,下面来一起看看吧. 方法一:通过代码控制 @interface UIApplication(UIApplicationDeprecated) // Setting statusBarHidden does nothing if your application is using the default UIViewController-based status bar system. @property(readwrite, nonatomic,ge
-
iOS实现点击状态栏自动回到顶部效果详解
前言 大家都知道实现状态栏(statusBar)点击自动回到顶部效果,旨在为用户在浏览界面时提供便利,点击状态栏能够快速回到界面顶部,所以主要针对可以滚动的UIScrollView和其子类UITableVIew和UICollectionView. 这里将从以下几个方面实现该功能. 1.苹果自带功能 分析: 首先,苹果自己已经提供了该功能,往上滑动tabView,点击statusBar,tableView会自动回到初始位置.如下图所示,此时点击statusBar,屏幕最上方显示的将是第一个cell
-
iOS 隐藏导航条和状态栏实现方法
iOS 隐藏导航条和状态栏实现方法 状态栏的高度是20,导航栏的高度是44,如果同时存在状态栏的导航条,我们通常会设置view上的控件的位置的X 大于等于 64. 一:隐藏导航条:self.navigationController.navigationBarHidden = YES; 二:隐藏状态栏: 第一步:在info.plist 文件里增加两个类型(Type)为bool 选项, Status bar is initially hidden 设为YES:View controller-ba
-
iOS 自定义状态栏和导航栏详细介绍
iOS 自定义状态栏和导航栏 开发IOS APP 经常会根据需求更改状态栏和导航栏,这里整理了几种方法,大家可以看下. 导航栏透明 -(void)viewWillAppear:(BOOL)animated { //viewWillAppear中设置透明 [super viewWillAppear:animated]; [self.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault]; /
-
iOS在状态栏上显示提醒信息的功能定制
先看效果图 实现这个效果,用到了JDStatusBarNotification,这是一个易于使用和定制的在状态栏上显示提醒信息的控件,可自定义颜色.字体以及动画,支持进度条展示,并可以显示活动指示器. 假设这么一个场景,需要调接口修改个人资料,这时有3个状态,正在修改.修改成功.修改失败.我们可以写一个公共类,方便调用,譬如 NSObject+Common. .h文件写方法 #import <Foundation/Foundation.h> @interface NSObject (Commo
-
IOS 开发状态栏隐藏的实现办法
IOS 开发状态栏隐藏的实现办法 解决方法: IOS7以下版本隐藏UIStatusBar的方法: - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [application setStatusBarHidden:YES]; return YES; } 升级到iOS7后的方法: 在基类中重载UIViewController.h
-
详解在iOS App中自定义和隐藏状态栏的方法
自定义状态栏 有时候,需要在状态栏上显示一些自定义信息,比如新浪微博的官方iOS客户端:告知用户信息处于发送队列.发送成功或者发送失败. 如上图,通过在状态栏显示自定义信息,可以给用户友好又不影响软件使用的提示. 为此,我们显得定义一个自定义状态栏类,包含一个显示信息的Label: 复制代码 代码如下: @interface CustomStatusBar : UIWindow { UILabel *_messageLabel; } - (void)showStatusMes
-
iOS 设置状态栏的背景颜色方法
设置状态栏的背景颜色 - (void)setStatusBarBackgroundColor:(UIColor *)color { UIView *statusBar = [[[UIApplication sharedApplication] valueForKey:@"statusBarWindow"] valueForKey:@"statusBar"]; if ([statusBar respondsToSelector:@selector(setBackgro
-
IOS点击按钮隐藏状态栏详解及实例代码
IOS点击按钮隐藏状态栏详解 前言: 最近学习IOS的基础知识,实现隐藏状态栏的功能,这里就记录下来,希望对大家有所帮助 实例代码: @interface SecondViewController () @property (nonatomic, assign,getter=isHideStatus) BOOL hideStatus; @end @implementation SecondViewController - (void)viewDidLoad { [super viewDidLoa
-
图文讲解如何解决App的iOS 7顶部状态栏适配问题
首先说明下,ios7中,由于status bar不再占用单独的20px,如果app需要同时支持ios7和ios6.1以下,那就需要适配下了,适配开始: 先看用xcode新建项目后 IOS7和IOS6上的的运行效果: ps:一个empty application 里面+了一个rootcontroller,作为window的根控制器,view里面放了一个tableview; 是不是遇到的IOS7的新问题,状态栏跟tableview重叠了,OK,看见这个不想看到的结果,下面我们就开始正式的解决掉这个招
-
VM12 虚拟机使用桥接模式却连不上网的解决方法(图文讲解)
写计算机网络作业时遇见一个问题:虚拟机的IP.子网掩码.默认网关设置得与宿主机一致,但死活ping不通外网.内网. 折腾了一晚上终于知道问题出在哪儿了... 只需将VM的虚拟网络编辑器中关于 VMnet0 的设置改一下就行了: 1.进入VMware的 编辑 -> 虚拟网络编辑器. 2.选择更改设置. 3.将VMnet0(或其它类型为桥接模式的网络适配器)桥接的网卡由默认的"自动"改为连上互联网的网卡(如图). 4.由于我是通过WIFI连网,因此我选择WLAN接口(高通网卡),使用
-
Vue基本指令实例图文讲解
Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架.与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用.Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合.另一方面,当与现代化的工具链以及各种支持类库结合使用时,Vue 也完全能够为复杂的单页应用提供驱动. 一. v-on指令 1. 基础用法 v-on是事件监听的指令, 下面来看简单用法 <!DOCTYPE html> <html lang="en"&
-
Thinkphp使用Zxing扩展库解析二维码内容图文讲解
一.下载PHP版本的Zxing扩展库 下载地址:https://github.com/khanamiryan/php-qrcode-detector-decoder 二.使用Zxing扩展库 1.文件下载好后,直接解压,结构如下,我们只需要lib这个文件夹 2.将lib文件夹重命名为Zxing,然后打开Zxing目录下的QrReader.php文件,可以发现命名空间是Zxing 3.接下来就很简单了,把Zxing文件夹放到thnikphp的扩展目录extend里 4.报错 Fatal error
-
C++模拟实现vector示例代码图文讲解
目录 vector的模拟实现 使用memcpy拷贝问题 vector的模拟实现 #include <iostream> using namespace std; #include <assert.h> namespace myVector { template<class T> class vector { public: // Vector的迭代器是一个原生指针 typedef T* iterator; typedef const T* const_iterator;
-
ios 不支持 iframe 的完美解决方法(兼容iOS&安卓)
最近做微信公众号页面,因为入口不同,需要把公共页面抽取出来,然后根据不同的值,传递给后台不同的入口.刚开始用iframe页面嵌套(第一次尝试使用),但发现iOS系统对iframe嵌套页面的高度和定位控制的不到位,具体表现为,当嵌套的子页面的高度大于父页面的高度,且子页面中有触发弹框事件时,这时,如果子页面高度远远大于父页面高度,就会出现弹框找不到的情况,其实可能是在视口以下,弹框的位置只是相对于子页面来定位,并没有相对于视口定位. 尝试了好多种方法,均不理想,而安卓系统则表现良好,于是想到,iO
-
解决移动端 ios 系统键盘遮挡的问题
亲测 ios 9 ,ios10 系统有效,其他请自行测试,建议通过判断系统类型来动态引入此脚本 var isIPHONE = navigator.userAgent.toUpperCase().indexOf("IPHONE")!= -1; if(isIPHONE){ // 元素失去焦点隐藏iphone的软键盘 function objBlur(obj,time){ var startTime=0,endTime=0, time = !time?30:time, docTouchend
-
快速解决vue在ios端下点击响应延时的问题
在apicloud开发中遇到的问题:用vue.js的点击事件,安卓点击响应迅速而ios点击响应有延时(大约300ms). 解决方案如下: 引入<script type="text/javascript" src="/js/mobile/fastclick.js"></script> 然后在页面加载时,使用 $(function() { FastClick.attach(document.body); }); 以上这篇快速解决vue在ios端下
-
如何运行.ipynb文件的图文讲解
首先cmd下面输入: pip install jupyter notebook,安装慢的改下pip的源为国内的源 然后cmd中输入: jupyter notebook就会弹出一个页面 先upload这个.ipynb后缀的文件 然后点击上传后的.ipynb文件 点击下面的红色方框中的第一个按钮,运行,运行后,网页的下面部分会输出结果. 注意,选中一个框,方框变成蓝色,表示选中 如果鼠标点击代码,方框变成绿色,表示处于编辑状态 选中方框变蓝色后,按下键盘上的小写L可以显示行数 以上这篇如何运行.ip
-
解决vue js IOS H5focus无法自动弹出键盘的问题
IOS不自动弹出键盘,必须手动触发一下focus才行,不能自动调用,所以需要诱导用户点击某个按钮触发focus,最终修改的方法,默认隐藏密码输入框,隐藏不能用v-if或者是v-show,用position:absolute, top:-1000,然后点击输入密码将top改为视窗内,并且调用focus的方法 代码如下,有问题欢迎评论 <template> <div class="pwdpush-box"> <h4 class="enter-pass
随机推荐
- Redis教程(九):主从复制配置实例
- JS如何判断浏览器类型和详细区分IE各版本浏览器
- JS日期加减,日期运算代码
- 用VBSCRIPT控制ONSUBMIT事件
- python利用正则表达式排除集合中字符的功能示例
- python脚本实现xls(xlsx)转成csv
- 详解ASP.NET与ASP.NET Core用户验证Cookie并存解决方案
- Swift中闭包实战案例详解
- 在Django的URLconf中使用多个视图前缀的方法
- C#多线程ThreadPool线程池详解
- Mac系统上用Docker搭建lamp环境
- MySQL索引之主键索引
- JavaScript通过setTimeout实时显示当前时间的方法
- escape函数解决js中ajax传递中文出现乱码问题
- Java 文件解压缩实现代码
- qq登录,新浪微博登录接口申请过程中遇到的问题
- JQuery导航菜单选择特效
- 如何使用jQuery+PHP+MySQL来实现一个在线测试项目
- 详解Java Ajax jsonp 跨域请求
- JavaScript 数组some()和filter()的用法及区别