iPhone X如何处理View Controller inputAccessoryView?

2024-03-09

我有一个消息应用程序,它具有典型的 UI 设计,即全屏表格视图底部的文本字段。我将该文本字段设置为视图控制器的inputAccessoryView并打电话ViewController.becomeFirstResponder()以使该字段显示在屏幕底部。

我知道这是 Apple 推荐的实现此 UI 结构的方法,并且它在“经典”设备上完美运行,但是当我在 iPhone X 模拟器上测试时,我注意到使用这种方法,文本字段不尊重新的“安全区域” 。文本字段呈现在主屏幕指示器下方屏幕的最底部。

我查看了 HIG 文件,但没有发现任何关于inputAccessoryView在视图控制器上。

这很困难,因为使用这种方法我实际上并不能直接控制任何约束,我只是设置inputAccessoryView并让视图控制器从那里处理 UI。所以我不能仅仅将场地限制在新的安全区域。

有没有人找到关于此的良好文档或知道在 iPhone X 上运行良好的替代方法?


inputAccessoryViewiPhone X 上的安全区域

  • 当键盘不可见时,inputAccessoryView固定在屏幕的最底部。没有办法解决这个问题,我认为这是有意的行为。

  • the layoutMarginsGuide(iOS 9+)和safeAreaLayoutGuide(iOS 11) 视图的属性设置为inputAccessoryView两者都尊重安全区域,即在 iPhone X 上:

    • 当键盘不可见时,bottomAnchor占主页按钮区域
    • 当显示键盘时,bottomAnchor位于底部inputAccessoryView,这样键盘上方就不会留下无用的空间

工作示例:

import UIKit

class ViewController: UIViewController {

    override var canBecomeFirstResponder: Bool { return true }

    var _inputAccessoryView: UIView!

    override var inputAccessoryView: UIView? {

        if _inputAccessoryView == nil {

            _inputAccessoryView = CustomView()
            _inputAccessoryView.backgroundColor = UIColor.groupTableViewBackground

            let textField = UITextField()
            textField.borderStyle = .roundedRect

            _inputAccessoryView.addSubview(textField)

            _inputAccessoryView.autoresizingMask = .flexibleHeight

            textField.translatesAutoresizingMaskIntoConstraints = false

            textField.leadingAnchor.constraint(
                equalTo: _inputAccessoryView.leadingAnchor,
                constant: 8
            ).isActive = true

            textField.trailingAnchor.constraint(
                equalTo: _inputAccessoryView.trailingAnchor,
                constant: -8
            ).isActive = true

            textField.topAnchor.constraint(
                equalTo: _inputAccessoryView.topAnchor,
                constant: 8
            ).isActive = true

            // this is the important part :

            textField.bottomAnchor.constraint(
                equalTo: _inputAccessoryView.layoutMarginsGuide.bottomAnchor,
                constant: -8
            ).isActive = true
        }

        return _inputAccessoryView
    }

    override func loadView() {

        let tableView = UITableView()
        tableView.keyboardDismissMode = .interactive

        view = tableView
    }
}

class CustomView: UIView {

    // this is needed so that the inputAccesoryView is properly sized from the auto layout constraints
    // actual value is not important

    override var intrinsicContentSize: CGSize {
        return CGSize.zero
    }
}

在这里查看结果 https://i.stack.imgur.com/M7IVp.gif

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

iPhone X如何处理View Controller inputAccessoryView? 的相关文章

  • iOS 使用 NSColor 与 UIColor?

    有什么区别UIColor and NSColor 什么时候会使用每一种 我碰到NSColor在试图弄清楚的同时UIColor用于 iOS 中的属性字符串 我理解使用UIColor对于 UIKit 等 但我不认为NSColor对于这种事情确实
  • 快速钥匙串更新只有在第二次尝试时才起作用

    您好 我在更新存储在钥匙串中的登录信息方面遇到了 iOS 钥匙串的一个非常奇怪的问题 因此 如果没有保存的凭据 则正确运行保存函数会保存登录信息 如果登录信息已存在并且用户更新了密码 则更新功能仅正确更新密码 但是 如果登录信息存在并且我尝
  • Objective C (iphone) 关于发布的问题

    如果我创建一个视图 并将其添加为子视图并将其添加到数组中 是否必须释放它两次 UIView cat UIView alloc initWithFrame someFrame self view addSubview cat self ani
  • iOS 13 检查 CLLocationManager 的临时授权状态

    根据 WWDC 视频 https developer apple com videos play wwdc2019 705 https developer apple com videos play wwdc2019 705 当你要求 Al
  • UITesting、XCTest 当前 ViewController 类

    简单的问题 我有一个按钮可以执行到下一个视图控制器的操作 我想写 UI XCTest 来告诉我它是否打开了我想要的视图控制器 UI 测试框架无法访问您的应用程序代码 这使得无法对实例进行类断言 你不能够directly告诉屏幕上的控制器的类
  • 如何在 iOS 中将 Firebase 对象持久保存到磁盘?

    看起来Firebase http www firebase comiOS 实现不支持客户端模型的离线缓存 这在实践中意味着 对于需要身份验证的 Firebase 应用程序 您需要首先进行身份验证并等待 Firebase 完成登录 检查用户身
  • 在回调函数中调用目标c函数

    如何在回调函数中调用目标c函数 回调函数 static OSStatus inputRenderCallback void inRefCon AudioUnitRenderActionFlags ioActionFlags const Au
  • iPhone SQLite页面缓存不断增长

    I use sqlite数据库用于存储 还有许多数据库事务 我的问题是 sqlite 页面缓存的内存使用量快速增长 在instruments我可以找到这条线 Graph Category Live Bytes Living Transien
  • 在 UITextView 中获取 HTML

    我在中显示htmlUITextView by self textView setValue b Content b forKey contentToHTMLString 编辑内容后UITextView 我想获取包含 html 的内容 所以我
  • SceneKit unproject Z 文档解释?

    我正在经历一些 SceneKit 概念 而我试图在脑海中巩固的一个概念是 unprojectPoint 我知道该函数将获取 2D 中的一个点并返回 3D 中的一个点 因此具有正确的 Z 值 当我阅读文档时 我读到了以下内容 method u
  • 如何为图层阴影不透明度设置动画?

    我有一个视图 我已将 LayerOpacity 设置为 1 theView layer shadowOpacity 1 0 当视图位于屏幕下方时 这看起来很好 当我将此视图向上移动以与另一个有阴影的视图齐平时 它们看起来不太好 有没有办法让
  • 在 JavaScript 中检测页面是否加载到 WKWebView 中

    如何使用 javascript 可靠地检测到页面已加载到 WKWebView 中 我希望能够检测到这些场景 iOS 和 WKWebView iOS 和 Safari not iOS 关于 UIWebView 有一个类似的问题here htt
  • 在情节提要中将 Segue 拖至自身

    我想将一个 Segue 从我的视图控制器拖到其自身 所以我可以推送该特定视图控制器的 无限 实例 我知道如何在代码中执行此操作 即以编程方式实例化视图控制器 但是 我想尽可能使用 segues 我发现了一些在故事板中进行自我延续的 技巧 但
  • 如何将CIFilter应用到UIView上?

    根据Apple docs 过滤属性CALayer不支持iOS 当我使用正在申请的应用程序之一时CIFilter to UIView即 Splice Funimate 和 Artisto 的视频编辑器 Videoshow FX 这意味着我们可
  • 为arm64或arm7s编译OpenSSL FIPS功能库时出现未知的cpu类型

    我可以成功 至少没有警告并生成 a 文件 针对 arm7 x86 64 和 i386 进行编译 当我编译arm64时 我得到Unknown cpu type 100000c no adjustments made 当我编译arm7s时 我得
  • Swift:协议、结构、类

    我开始学习 Swift 语言 但在理解协议 结构和类方面遇到了困难 我来自 Android 方面的编程 所以我相信 Swift 协议基本上是 Java 接口 其中每一个的正确用例是什么 这些类比并不 完全 正确 但这就是我所理解的要点 是的
  • 命令 /Applications/Xcode-beta.app/Contents/Developer/usr/bin/atool 失败,退出代码 255

    它发生在新的 Xcode7 beta 中 CompileAssetCatalog Users admin Library Developer Xcode DerivedData InstaAd ddgdnbxlpxipirebpndfmgr
  • UILabel 中的文本未垂直居中

    我使用以下代码创建了一个标签 func setupValueLabel valueLabel numberOfLines 1 valueLabel font UIFont name Avenir Black size 50 valueLab
  • cordova插件条码扫描仪打不开扫描

    我的条形码扫描仪插件有问题 我不是天才 我不太了解如何编写网络应用程序 我使用phonegap和cordova 并且尝试制作一个网络应用程序 在单击链接后扫描条形码 我之前已经使用此命令行安装了该插件 cordova plugin add
  • 无需越狱即可检测iOS9上哪个应用程序处于前台

    我正在尝试记录用户在 iOS9 上的个人应用程序使用情况 我宁愿它不会使用越狱有限的解决方案 不言自明 在越狱手机上执行此应用程序的变体应该不难 https www andyibanez com create mobilesubstrate

随机推荐

  • 在 Pandas 中加载通用 Google 电子表格

    当我尝试在 pandas 中加载 Google 电子表格时 from StringIO import StringIO import requests r requests get https docs google com spreads
  • 无法使用conda和python 3.8安装tensorflow

    最近 我升级到了 Anaconda3 2020 07 它使用 python 3 8 在以前版本的anaconda中 tensorflow安装成功 该版本未能成功安装Tensorflow 我运行了下面的命令 conda install ten
  • 如何将 Web 应用程序转换为桌面可执行文件?

    我使用 AngularJS jQuery Bootstrap 和 AJAX REST API 构建了 HTML 应用程序 是否可以为 Windows 操作系统创建可执行文件 安装程序 如果没有任何第三方软件 它应该看起来像本机应用程序 但只
  • WCF 与 Flash 教程

    我是 WCF 的初学者 我选择 WCF 而不是 Web 服务 因为我读过的所有文章和博客似乎都指出 ASMX 已经是旧闻了 我读过一些有关旧 Web 服务和 WCF 之间差异的内容 并且了解了总体思路 我也采取了MSDN WCF 教程 ht
  • Node.js / Express.js - 如何覆盖/拦截 res.render 函数?

    我正在使用 Connect Express js 构建 Node js 应用程序 并且我想拦截 res render view option 函数以运行一些代码 然后再将其转发到原始渲染函数 app get someUrl function
  • 如何更改所用纱线的版本?

    我使用Homebrew安装yarn 跑步yarn v显示我目前使用0 23 2 I ran brew upgrade yarn获取最新版本 即0 24 6 Homebrew成功升级后yarn I run yarn v又来了 不过版本还是0
  • MvvmCross 自定义事件绑定事件参数

    我使用 MvvmCross 在 EditText 上为 FocusChange 事件创建了自定义绑定 我可以绑定事件并触发 但我不知道如何传递事件参数 我的自定义绑定是这样的 using Android Views using Androi
  • 使用 python 在 CSV 文件中搜索字符串并写入结果

    usr bin python import csv import re string 1 OneTouch AT string 2 LinkRunner AT string 3 AirCheck searched OneTouch AT L
  • R 中的左移列

    我有一个这样的数据集 temp lt structure list col 1 c P9603 11040 80053 col 2 c 84484 80061 80061 A0428 85025 col 3 c V2632 82310 86
  • 谷歌电子表格公式中的多个嵌套 if 块

    我试图编写一个嵌套的 if 语句 如下伪代码 IF h4 1 CORRECT IF h4 2 CORRECT IF h4 3 CORRECT IF h4 4 CORRECT 但是 如果我写出代码并每次添加 if 语句 我会收到以下错误 IE
  • 使用 PHP 将时间添加 30 秒

    我怎样才能给这个时间加上30秒呢 time date m d Y h i s a time 我不知道该怎么做 因为它显示了很多不同的时间单位 而我只想添加 30 秒 time date m d Y h i s a time 30
  • 输入大数以避免 NumberFormatException

    我必须控制从1到9999999999的输入 代表学校的注册号 原始类型 long 只能容纳大约 2 000 000 000 我如何存储这个大小的数字 根据this http docs oracle com javase tutorial j
  • www.sandbox.itunes.apple.com 已关闭

    在此先感谢您的帮助 具体问题 由于在沙盒环境中测试应用内购买时出现错误 1001 无法连接到 iTunes 商店 知道是否重要吗 www sandbox itunes apple com下降了吗 如果没有 我怎么知道苹果的沙盒是否已关闭 背
  • 如何创建一个所有字段都是公共的公共结构,而无需为每个字段重复“pub”?

    如何在 Rust 中定义一个公共结构 其中所有字段都是公共的 而不必重复pub每个字段前面的修饰符 A pub struct宏将是理想的 pub struct Foo a i32 b f64 这相当于 pub struct Foo pub
  • 如何创建动画切换按钮?

    是的 我可以创建带有 2 张图片的 ToggleButton 开 关 但我想创建带有 3 5 张图片的 ToggleButton 例如 什么时候关闭 我单击 关闭图片 中图 图片上 它什么时候开启 我点击 图片上 中图 关闭图片 所以它就像
  • 带有 postgres 的游标,数据存储在哪里以及对数据库的调用次数

    您好 我正在使用 psycopg2 进行 postgres 访问 我试图了解 光标 存储返回的行的位置 是将其作为临时表存储在数据库中还是存储在客户端 游标 当您指定获取多行时 是否一次命中数据库一个查询 或者它是否命中数据库一次 获取第一
  • android - 无需root即可将字体安装到android平台

    我开发了一个新的应用程序 它是一种古老的埃及语言 科普特语 我需要在 Android 平台上安装特定的字体 使这种语言可读 我搜索是否找到应用程序执行相同的功能iFont 另外 当我访问字体文件夹时 我发现它允许安装字体 在线获取字体 那么
  • Javascript 数组分页

    我正在尝试编写一个 Javascript 函数 该函数需要array page size and page number作为参数并返回一个模仿分页结果的数组 paginate function array page size page nu
  • 我可以用64位jre运行使用32位jdk开发的java程序吗?应用程序使用32位非java系统库

    我正在 64 位 Windows 7 安装上使用 64 位 eclipse 开发一个 java 应用程序 我被迫使用 32 位 JDK 1 7 0 因为应用程序使用Jpcap http netresearch ics uci edu kfu
  • iPhone X如何处理View Controller inputAccessoryView?

    我有一个消息应用程序 它具有典型的 UI 设计 即全屏表格视图底部的文本字段 我将该文本字段设置为视图控制器的inputAccessoryView并打电话ViewController becomeFirstResponder 以使该字段显示