iPhone屏幕尺寸/导航高度
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iPhone屏幕尺寸/导航高度相关的知识,希望对你有一定的参考价值。
参考技术A 综上:导航栏以下的视图顶部的y坐标非全面屏手机应该为64,全面屏变成88了。底部Tabbar也由原来的49,增加了34,变成了83的高度。
注意:ios 14 iPhone11/iPhone12的状态栏高度为48/47,导航高度为92/91
因此,对导航高度的宏定义不能直接用64和88两个高度来区分非全面屏和全面屏。具体如下
如果对导航视图高度要求比较准确的话可以根据屏幕宽高判断具体机型,再进行宏定义,👇状态栏隐藏的情况下iPhone11(48)、iPhone12(47)状态栏高度有误差
iPhone屏幕键盘的高度是多少?
【中文标题】iPhone屏幕键盘的高度是多少?【英文标题】:What is the height of iPhone's onscreen keyboard? 【发布时间】:2012-07-02 07:34:05 【问题描述】:纵向高度和横向高度以磅为单位。
【问题讨论】:
在这里您可以找到 iPhone 的所有尺寸:iPhone dimensions 不要使用最后一个“iPhone 尺寸”链接!它是从 2011 年开始的,在 iOS 8 出现之前,它允许屏幕键盘高度变化。 @MikeGledhill 屏幕键盘高度甚至在 iOS 8 之前也有所不同。 相关:如果您正在寻找键盘高度的实际值(例如出于调试目的),请参阅iOS foreign language keyboard heights? 【参考方案1】:键盘高度取决于型号、QuickType 栏、用户设置...最好的方法是动态计算:
Swift 3.0
var heightKeyboard : CGFloat?
override func viewWillAppear(_ animated: Bool)
super.viewWillAppear(animated)
NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardShown(notification:)), name: NSNotification.Name.UIKeyboardDidShow, object: nil)
func keyboardShown(notification: NSNotification)
if let infoKey = notification.userInfo?[UIKeyboardFrameEndUserInfoKey],
let rawFrame = (infoKey as AnyObject).cgRectValue
let keyboardFrame = view.convert(rawFrame, from: nil)
self.heightKeyboard = keyboardFrame.size.height
// Now is stored in your heightKeyboard variable
【讨论】:
【参考方案2】:我找不到最新的答案,所以我用所有 iOS 11.0 模拟器检查了它:
iOS 11 Device | Screen Height | Portrait | Landscape |
---|---|---|---|
iPhone 4s | 480.0 | 216.0 | 162.0 |
iPhone 5, iPhone 5s, iPhone SE | 568.0 | 216.0 | 162.0 |
iPhone 6, iPhone 6s, iPhone 7, iPhone 8, iPhone X | 667.0 | 216.0 | 162.0 |
iPhone 6 plus, iPhone 7 plus, iPhone 8 plus | 736.0 | 226.0 | 162.0 |
iPad 5th generation, iPad Air, iPad Air 2, iPad Pro 9.7, iPad Pro 10.5, iPad Pro 12.9 | 1024.0 | 265.0 | 353.0 |
【讨论】:
【参考方案3】:请记住,在 iOS 8 中,屏幕键盘的大小可以有所不同。不要假设屏幕键盘总是可见(具有特定高度)或不可见。
现在,在 iOS 8 中,用户还可以打开和关闭文本预测区域...当他们这样做时,它会再次启动应用程序的 keyboardWillShow
事件。
这将破坏大量遗留代码示例,建议编写keyboardWillShow
事件,该事件仅测量屏幕键盘的当前高度,并在页面上向上或向下移动控件按这个(绝对)数量。
换句话说,如果您看到任何示例代码,它只是告诉您添加一个keyboardWillShow
事件,测量键盘高度,然后将控件的高度调整这个量,这将不再有效。
在上面的示例中,我使用了来自以下站点的示例代码,它为垂直约束 constant
值设置动画。
Practicing AutoLayout
在我的应用程序中,我向我的UITextView
添加了一个约束,设置在屏幕底部。当屏幕第一次出现时,我存储了这个初始垂直距离。
然后,每当我的keyboardWillShow
事件开始时,我添加(新)键盘高度到这个原始约束值(所以 constraint 调整控件的高度)。
是的。太丑了。
我有点恼火/惊讶的是,Xcode 6 可怕的 AutoLayout 不仅允许我们将控件的底部附加到屏幕底部或屏幕键盘的顶部。
也许我错过了什么。
除了我的理智。
【讨论】:
实际上,即使在较旧的 iOS 版本上,键盘大小也总是不同的。例如检查笔迹中文 糟糕,没有意识到这一点。我只是觉得奇怪的是,这么多“keyboardWillShow”示例总是假设这个事件只会在键盘出现或消失时被调用一次。没有任何功能可以处理键盘停留在屏幕上,但是会改变它的大小。 @MikeGledhill 我认为您应该使用“UIKeyboardWillChangeFrameNotification”来更改由于旋转或显示(/隐藏)文本预测栏而导致的帧... 我刚刚用我的应用测试了这个。每当我让键盘出现或打开或关闭文本预测区域时,UIKeyboardWillChangeFrameNotification always 都会被称为keyboardWillShow 事件。所以它并没有太大帮助。我的意思是......用户需要对这些事件有点小心,仅此而已。 为什么这个没有更多的关注?【参考方案4】:我创建了这个表格,其中包含 iPhone 和 iPad 键盘的高度,适用于横向和纵向模式,工具栏打开和关闭。
我什至解释了如何在代码 here 中使用这些维度。
请注意,如果您需要在布局视图之前知道键盘的尺寸,则应仅使用这些尺寸。否则,其他答案的解决方案效果更好。
【讨论】:
【参考方案5】:苹果手机
键盘尺寸:
-
5S、SE、5、5C (320 × 568)
键盘大小 = (0.0, 352.0, 320.0, 216.0)
键盘尺寸 = (0.0, 315.0, 320.0, 253.0)
2.6S,6,7,8:(375 × 667) : 键盘尺寸 = (0.0, 407.0, 375.0, 260.
3.6+,6S+, 7+, 8+ : (414 × 736) 键盘大小 = (0.0, 465.0, 414.0, 271.0)
4.XS, X :(375 X 812) 键盘大小 = (0.0, 477.0, 375.0, 335.0)
5.XR,XSMAX((414 x 896) 键盘大小 = (0.0, 550.0, 414.0, 346.0)
【讨论】:
【参考方案6】:我在 iOS 7.1 中使用以下方法来确定键盘的框架。
在我的视图控制器的init方法中,我注册了UIKeyboardDidShowNotification
:
NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
[center addObserver:self selector:@selector(keyboardOnScreen:) name:UIKeyboardDidShowNotification object:nil];
然后,我在keyboardOnScreen:
中使用以下代码来访问键盘框架。此代码从通知中获取userInfo
字典,然后访问与UIKeyboardFrameEndUserInfoKey
关联的NSValue
。然后,您可以访问 CGRect 并将其转换为视图控制器的视图坐标。从那里,您可以根据该框架执行所需的任何计算。
-(void)keyboardOnScreen:(NSNotification *)notification
NSDictionary *info = notification.userInfo;
NSValue *value = info[UIKeyboardFrameEndUserInfoKey];
CGRect rawFrame = [value CGRectValue];
CGRect keyboardFrame = [self.view convertRect:rawFrame fromView:nil];
NSLog(@"keyboardFrame: %@", NSStringFromCGRect(keyboardFrame));
斯威夫特
以及 Swift 的等效实现:
NotificationCenter.default.addObserver(self, selector: #selector(keyboardDidShow), name: UIResponder.keyboardDidShowNotification, object: nil)
@objc
func keyboardDidShow(notification: Notification)
guard let info = notification.userInfo else return
guard let frameInfo = info[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue else return
let keyboardFrame = frameInfo.cgRectValue
print("keyboardFrame: \(keyboardFrame)")
【讨论】:
虽然看起来有点复杂,但这肯定比硬编码键盘大小要好。正确答案。 对这个答案投了票,对这个问题投了反对票。 OP绝对不知道他在说什么。小伙伴们要小心!这个答案是正确的! 景观的补充: if (SYSTEM_VERSION_LESS_THAN(@"8.0")) _keyboardHeight = keyboardFrame.size.width; 其他 _keyboardHeight = 键盘框架.size.height; 有没有办法在不出现键盘的情况下做到这一点?就我而言,我希望在键盘后面有相同高度的东西(类似于信使的东西) @superarts.org 没有必要否决这个问题;人们很可能会搜索这个,他们现在会看到这个答案..所以一切都很好:)【参考方案7】:版本说明:这在 iOS 9 和 10 中不再有价值,因为它们支持自定义键盘尺寸。
这取决于型号和 QuickType 栏:
http://www.idev101.com/code/User_Interface/sizes.html
【讨论】:
版本说明:这在 iOS 9 和 10 中不再有价值,因为它们支持自定义键盘尺寸。【参考方案8】:纵向模式的键盘高度为 216pts,横向模式的键盘高度为 162pts。
Source
【讨论】:
如果您要发布自我回答的问题,至少要给出体面的答案。键盘的大小应该从通知对象中获取,而不是从某些网站获取的硬编码值。见here @jrturton 问题不在于如何以编程方式查找高度。这个问题不仅对程序员有用,对图形设计师等也有用。您要求的答案属于另一个问题。事实上,这个答案还有另一个问题:***.com/a/7302291/310121 @ErikB 小心。键盘大小取决于键盘的语言和类型。 为了您自己,切勿使用硬编码值!作为一个强有力的例子,用户可能正在使用分体式(两部分)键盘,它不太关心高度。 这个答案既懒惰又危险。请从 UIKeyboardDidShowNotification 获取键盘高度,因为实际值往往会在 iOS 主要版本之间发生变化。请参阅下面肯的回答。以上是关于iPhone屏幕尺寸/导航高度的主要内容,如果未能解决你的问题,请参考以下文章