如何动态ios 获取键盘的高度度

输入关键字或相关内容进行搜索
如果没有手动调整过webview的高度的话,默认情况下,屏幕的高度=顶部状态栏的高度+webview的高度。
如果软键盘打开,则屏幕的高度=顶部状态栏的高度+webview的高度+软键盘的高度。
HTML5 规范目前没有提供状态栏高度和软键盘高度的直接的查询方法,不过有了Native.js,我们还是能查询到所有这些高度的数值。背景知识介绍:\n手机屏幕有真实的物理分辨率,比如小米note的高度是1920px。
但在网页里,一个10px的字体,并不会小的看不清,因为webview提供了逻辑分辨率的概念。
如果不在meta里设置,默认下小米note的放大系数scale是3,就是会放大3倍显示。
也就是对于HTML而言,小米note的高度是px。
如果网页是全屏的,没有顶部状态栏,那么一个640px高的div将撑满屏幕高度。
\n获取屏幕、顶部状态栏和软键盘的高度\n1. 屏幕的高度\n获取屏幕的高度很简单,HTML自带了screen.height,直接就可以得到屏幕的整体高度,单位是px,物理分辨率值(不是HTML的逻辑分辨率)。
HTML5Plus里提供了plus.screen.resolutionHeight方法,也是屏幕高度,但这个值是逻辑分辨率的高度。参考[http://html5plus.org/doc/zh_cn/device.html#plus.screen](http://html5plus.org/doc/zh_cn/device.html#plus.screen)
screen.height = plus.screen.resolutionHeight*plus.screen.scale
\n2. 获取webview高度\n虽然webview的getStyle可以得到webview的高度,但开发者如果不手动设置的话,默认值是100%,这个值对本文探讨的问题没有意义。我们需要px的物理高度。
在Android里通过如下js代码可以得到webview的高度:plus.android.invoke(plus.android.currentWebview(),&getHeight&)
这是一段Native.js代码,由于Android的webview原生对象就有getHeight()方法,所以就可以直接这样调用。
当然webview原生对象还有很多方法属性都可以调,具体参阅[Native.js入门](http://ask.dcloud.net.cn/docs/#http://ask.dcloud.net.cn/article/88)
图1(此图中,物理分辨率是蓝色字体,逻辑分辨率是黑色字体)
对于iOS,就没必要使用Native.js这么复杂的技术了,iOS的屏幕高度是固定的几个,直接判断屏幕高度和设备型号就可以了。
\n3. 获取状态栏高度\n顶部状态栏比较复杂,如果webview设了全屏,那么状态栏高度就为0。
如果设置了沉浸式状态栏,状态栏透明了,虽然状态栏存在理论高度,但webview高度是全屏的。
plus.navigator.getStatusbarHeight(),这个api专门获取状态栏高度。
\n4. 获取输入法高度\n当弹出输入法时,在Android上,webview的高度会自动减少,留出空间给软键盘。
那么输入法高度=屏幕高度-状态栏高度-webview高度
在小米note上,默认输入法高度是 863px。
图2(此图中,物理分辨率是蓝色字体,逻辑分辨率是黑色字体)
\n5. 流应用任务栏高度\n在流应用环境中,比如iOS流应用,会有一个流应用任务栏,这个任务栏的出现会挤压webview的高度。
如果开发者要设置一个元素居底,请使用bottom方法,而不是通过屏幕高度-webview高度设top,以避免出现流应用任务栏时高度错位。
\n说说HTML里的几个高度\n其实HTML自己也提供了很多高度相关的api,除了screen.height还有document.body.clientHeight,document.body.scrollHeight,感觉也很容易混淆。
document.body.clientHeight是网页内容区的有效高度,符合盒模型。document.body.scrollHeight是网页可滚动区域的高度。
如图2所示:
- 此时document.body.clientHeight小于webview高度,而document.body.scrollHeight等于webview高度,即document.body.scrollHeight=plus.android.invoke(plus.android.currentWebview(),&getHeight&) 。
- 如果数字不是1-5,而是1-10,那么document.body.clientHeight会继续增加,但内容不够多,不会滚动,document.body.scrollHeight不变,仍是webview高度。
- 如果网页内容非常多,数字到了40,那document.body.clientHeight会继续增加,并且只要发生了滚动,则document.body.clientHeight=document.body.scrollHeight
\n其他相关知识。\n
监控软键盘是否弹出,Android上可以使用HTML自带的resize事件。
但是要判断横竖屏,因为横竖屏切换也会造成resize,所以高度变而宽度不变,就是软键盘弹出或消失了。
强制弹出键盘,也有Native.js示例,
好吧,还是会减少的,只是iPhone5s不会减少
这个文章是在两年前发布的,很多属性都已经更改了,状态栏高度可以直接获取,就是在ios中,软键盘出现后,webview的高度并不会随之减少了
var screenHeight = plus.screen.resolutionH//获取屏幕高度
或者 var screenHeight = screen.
var webviewHeight = plus.android.invoke(plus.android.currentWebview(),&getHeight&);//获取webview的高度
我用方法获取的屏幕高度小于获取webview的高度
减出来的都是负数了......
是否可以比较两次webview的高度变化作为软键盘的高度?
我想获取的是在屏幕整个窗口上显示的内容的高度,不是屏幕的高度,怎么获取????
那只要苹果一出新品,高宽变了,程序就跟着升级?
我刚试过,软键盘弹出会触发resize, 收回却不会触发resize, 为什么?似乎高度变短了就不再变回来。我在键盘消失后再次查询window.innerheight, 只有220左右。
逻辑分辨率 能设置否
我的页面弹出软键盘好像不会触发resize事件呢?这个是什么情况呢?
看你调多少了,只要软键盘弹出会挤压webview的高度变化,就会触发resize
那么如果手动调整过webview的大小呢?监听resize还可以判断软键盘弹出吗?
可以使用如下获取弹出软键盘后,屏幕可视区域的高度:
document.body.clientHeight / plus.screen.scale
谢谢,感谢晚了,哈哈
在ios上面,网页的键盘会多出一行类似于工具栏的东西,怎么样去掉这一行工具栏呢?这样会让APP看起来想个网页
这也可以。。。。 好的,
我知道它就是20px
iphone的设备高宽都是固定的几个值,判断device的高度就都知道了。
是要这个吗?http://www.html5plus.org/doc/zh_cn/device.html#plus.screen
为什么没有iphone的手机屏幕高度获取?
没有找到screen的api?????????????
要回复文章请先或
赞助DCloud可免广告,
赞助DCloud可免广告,请教各位 iOS 第三方输入法如何监听弹出键盘的高度呢?比如搜狗、百度等,常规的监听事件方法得不到第三方的键盘高度! - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
已注册用户请 &
iOS 开发实用技术导航
NSHipster 中文版
cocos2d 开源 2D 游戏引擎
Google Analytics for Mobile 统计解决方案
Design Guides and Resources
Transcripts of WWDC sessions
Cocoa with Love
Cocoa Dev Central
iOS 开发实用书单
Style Guides
Useful Tools and Services
请教各位 iOS 第三方输入法如何监听弹出键盘的高度呢?比如搜狗、百度等,常规的监听事件方法得不到第三方的键盘高度!
18:03:29 +08:00 · 3096 次点击
// keyboardDidShow 方法
NSDictionary* info = [notif userInfo];
NSValue*
aValue = [info objectForKey:UIKeyboardFrameEndUserInfoKey];
CGSize keyboardSize= [aValue CGRectValue].
目前尚无回复
& · & 698 人在线 & 最高记录 3541 & · &
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.1 · 15ms · UTC 19:45 · PVG 03:45 · LAX 12:45 · JFK 15:45? Do have faith in what you're doing.iOS - 通知监听键盘高度_Android开发_动态网站制作指南
iOS - 通知监听键盘高度
来源:人气:129
#define & SINGLE_NOTICE & [NSNotificationCenter defaultCenter]
#import &ViewController.h&
@interface
ViewController ()&UITextFieldDelegate& {
& & float _keyboardH&
// 键盘高度
@implementation ViewController
- (void)viewDidAppear:(BOOL)animated {
& & [super
viewDidAppear:animated];
& & [SINGLE_NOTICE
addObserver:self
selector:@selector(keyBoardWillShown:)
name:UIKeyboardWillChangeFrameNotification
object:nil];
- (void)viewDidDisappear:(BOOL)animated {
& & [super
viewDidDisappear:animated];
& & [SINGLE_NOTICE
removeObserver:self
name:UIKeyboardWillChangeFrameNotification
object:nil];
- (void)viewDidLoad {
& & [super
viewDidLoad];
& & // Do any additional setup after loading the view, typically from a nib.
& & self.view.backgroundColor = [UIColor
whiteColor];
& & for (NSInteger i =
0; i&2; i++) {
// 方便对比,创建两个输入框
& & & & UITextField *tf = [[UITextField
alloc] init];
& & & & tf.frame =
CGRectMake(50,
500-300*i,
& & & & tf.backgroundColor = [UIColor
lightGrayColor];
& & & & tf.placeholder =
@&input your info at this...&;
& & & & tf.delegate =
& & & & [tf setValue:[UIColor
forKeyPath:@&_placeholderLabel.textColor&];
& & & & [self.view
addSubview:tf];
#agma mark - 通知方法
- (void)keyBoardWillShown:(NSNotification *)noti {
& & NSDictionary *info = [noti
userInfo];
& & NSValue *value = [info
objectForKey:UIKeyboardFrameBeginUserInfoKey];
// 字典,含有键盘弹出时间,弹出高度的字典
& & // NSLog(@&info===&&&%@&,info);
& & CGRect keyboardRect = [value
CGRectValue];
& & float keyboardHeight = keyboardRect.size.
& & _keyboardHeight = keyboardH
& & // 键盘高度
& //& NSLog(@&keyHeight===%f&,keyboardHeight);
& & /** 控制台输出结果 (hone 7plus
14:13:01.260 InputKeyboardHeight[] info===&&&{
&& & UIKeyboardAnimationCurveUserInfoKey = 7;
&& & UIKeyboardAnimationDurationUserInfoKey = &0.25&;
&& & UIKeyboardBoundsUserInfoKey = &NSRect: {{0, 0}, {414, 271}}&;
&& & UIKeyboardCenterBeginUserInfoKey = &NSPoint: {207, 871.5}&;
&& & UIKeyboardCenterEndUserInfoKey = &NSPoint: {207, 600.5}&;
&& & UIKeyboardFrameBeginUserInfoKey = &NSRect: {{0, 736}, {414, 271}}&;
&& & UIKeyboardFrameEndUserInfoKey = &NSRect: {{0, 465}, {414, 271}}&;
&& & UIKeyboardIsLocalUserInfoKey = 1;
14:13:01.260 InputKeyboardHeight[] keyHeight===271.000000
#pragma mark - 输入框代理方法 -
- (void)textFieldDidBeginEditing:(UITextField *)textField {
& & if (_keyboardHeight ==
& & & & // 安全判断
& & & & _keyboardHeight =
// 输入框往上面提的高度
& & float textFieldUpHeight =
_keyboardHeight - (self.view.frame.size.height
- (textField.frame.size.height+textField.frame.origin.y));
& & if (textFieldUpHeight &
// 接收到键盘高度改变之后,做的事情...
& & & & [UIView
animateWithDuration:0.25
animations:^{
&& & & & & &
& & & & & & self.view.frame =
CGRectMake(0, -textFieldUpHeight,
self.view.frame.size.width,
self.view.frame.size.height);
&& & & & & &
& & & & }];
- (void)textFieldDidEndEditing:(UITextField *)textField {
& & [UIView
animateWithDuration:0.25
animations:^{
& & & & self.view.frame =
CGRectMake(0,
0, self.view.frame.size.width,
self.view.frame.size.height);
- (void)touchesBegan:(NSSet&UITouch *& *)touches withEvent:(UIEvent
& & [self.view
endEditing:YES];
优质网站模板没有更多推荐了,
不良信息举报
举报内容:
iOS动态获取键盘高度实现流畅的键盘输入框开发
举报原因:
原文地址:
原因补充:
最多只允许输入30个字
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!动态获取iphone键盘的高度
监听键盘呼出事件的消息:
针对键盘高度做出自适应:
最后,移除观察者。
写了个小例子:
NSNotificationCenter *defaultCenter = [NSNotificationCenter
defaultCenter];
//UIKeyboardWillShowNotification键盘出现
& & [defaultCenter
addObserver:self selector:@selector(keyboardWillShow:)
name:UIKeyboardWillShowNotification object:nil];
//UIKeyboardWillHideNotification 键盘隐藏
& & [defaultCenter
addObserver:self selector:@selector(keyboardWillHide:)
name:UIKeyboardWillHideNotification object:nil];
- (void)keyboardWillShow:(NSNotification *)aNotification
& & //获取键盘的高度
NSDictionary *userInfo = [aNotification userInfo];
& & NSValue *aValue = [userInfo
objectForKey:UIKeyboardFrameEndUserInfoKey];
& & CGRect keyboardRect = [aValue
CGRectValue];
& & int height =
keyboardRect.size.
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。}

我要回帖

更多关于 ios 如何获取键盘高度 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信