栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在Swift中从userInfo获取键盘大小

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在Swift中从userInfo获取键盘大小

您的生产线存在一些问题

var keyboardSize = notification.userInfo(valueForKey(UIKeyboardframeBeginUserInfoKey))
  • notification.userInfo
    返回一个 可选的 dictionary
    [NSObject : AnyObject]?
    ,因此在访问它的值之前必须先将其拆开。
  • Objective-C
    NSDictionary
    映射到Swift本机字典,因此您必须使用字典下标语法(
    dict[key]
    )来访问值。
  • 该值必须强制转换为
    NSValue
    以便可以调用
    CGRectValue
    它。

所有这些都可以通过可选分配,可选链接和可选强制转换的组合来实现:

if let userInfo = notification.userInfo {   if let keyboardSize = (userInfo[UIKeyboardframeBeginUserInfoKey] as? NSValue)?.CGRectValue() {    let contentInsets = UIEdgeInsets(top: 0, left: 0, bottom: keyboardSize.height, right: 0)       // ...   } else {       // no UIKeyboardframeBeginUserInfoKey entry in userInfo   }} else {   // no userInfo dictionary in notification}

或一步:

if let keyboardSize = (notification.userInfo?[UIKeyboardframeBeginUserInfoKey] as? NSValue)?.CGRectValue() {    let contentInsets = UIEdgeInsets(top: 0, left: 0, bottom: keyboardSize.height, right: 0)    // ...}

Swift 3.0.1(Xpre 8.1)更新:

if let userInfo = notification.userInfo {    if let keyboardSize = userInfo[UIKeyboardframeBeginUserInfoKey] as? CGRect {        let contentInsets = UIEdgeInsets(top: 0, left: 0, bottom: keyboardSize.height, right: 0)        // ...    } else {        // no UIKeyboardframeBeginUserInfoKey entry in userInfo    }} else {    // no userInfo dictionary in notification}

或一步:

if let keyboardSize = notification.userInfo?[UIKeyboardframeBeginUserInfoKey] as? CGRect {    let contentInsets = UIEdgeInsets(top: 0, left: 0, bottom: keyboardSize.height, right: 0)    // ...}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/448324.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号