UIViewController 自定义转换卡在 iOS13 上

2024-01-08

我在 iOS 应用程序中实现了两个视图控制器之间的自定义转换,并且它在 iOS 10、11 和 12 上运行良好。

现在我想使用 Xcode 11 beta 6 和 iOS 13 beta 8 为 iOS 13 做好准备,但转换被卡住了。

自定义转换应将第一个视图控制器向上移出屏幕,第二个视图控制器从下向上移动。但现在又回到了iOS13默认的呈现风格pageSheet,只需将第一个视图控制器缩小一点并添加一个暗淡的覆盖层。但第二个视图没有出现。

我发现在方法中animatePresentation(context: UIViewControllerContextTransitioning) the context不返回“来自”视图,所以context.view(forKey: .from)回报nil.

如果没有“来自”视图,我该怎么办?

FlyUpTransition.swift

class FlyUpTransition: NSObject, UIViewControllerAnimatedTransitioning {

    var mode: Mode = .present

    enum Mode {
        case present
        case dismiss
    }

    func transitionDuration(using transitionContext: UIViewControllerContextTransitioning?) -> TimeInterval {
        return TimeInterval(0.45)
    }

    func animateTransition(using transitionContext: UIViewControllerContextTransitioning) {
        switch mode {
        case .present:
            animatePresentation(context: transitionContext)
        case .dismiss:
            animateDismissal(context: transitionContext)
        }
    }

    func animatePresentation(context: UIViewControllerContextTransitioning) {
        guard let fromView = context.view(forKey: .from), let toView = context.view(forKey: .to) else { return }
        ...
    }

    func animateDismissal(context: UIViewControllerContextTransitioning) {
        guard let fromView = context.view(forKey: .from), let toView = context.view(forKey: .to) else { return }
        ...
    }
}

TL;DR

这是 iOS 中的一个错误,但你可以使用context.viewController(forKey:.from).view作为解决方法。

详细信息

这似乎是 iOS 13.0 中的一个错误。从 iOS 13.1 beta 3 开始,它仍然存在。http://www.openradar.me/radar?id=4999313432248320 http://www.openradar.me/radar?id=4999313432248320

转换上下文的view(forKey:)在某些情况下,方法会错误地返回 nil。看来这种情况正在发生view(forKey: .from)当呈现视图控制器以非模态方式呈现时。当解除最初从非模态视图控制器呈现的视图控制器时,以下结果view(forKey: .to)也为零。

我不仅在 iPhone 上的新工作表样式演示中观察到了这一点,而且还在 iPad 上的普通表单工作表和弹出窗口中观察到了这一点。

这个问题的另一个表现似乎是finalFrame(for:)方法返回错误CGRect当被问及此视图控制器的最终框架应该是什么时。在我的测试中,它返回一个全屏矩形,即使正确的视图较小。

解决方法是使用视图控制器返回的根视图控制器viewController(forKey:)方法,虽然文档 https://developer.apple.com/documentation/uikit/uiviewcontrollercontexttransitioning/1622055-view明确不鼓励:“此方法返回的视图可能是也可能不是相应视图控制器的根视图。”

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

UIViewController 自定义转换卡在 iOS13 上 的相关文章

  • 是否有针对不同屏幕尺寸的单独故事板?

    基本上我已经完成了一个应用程序 我唯一的问题是 ATM 机应用程序在设计时只考虑了 4 英寸显示屏 当在 3 5 英寸模拟器上运行时 应用程序会丢失 0 5 英寸 显然 那么我的问题是 如何在 Xcode 5 中为不同的屏幕尺寸设置不同的故
  • SwiftUI 列表与右侧的部分索引?

    是否可以有一个在右侧有索引的列表 就像下面 SwiftUI 中的示例一样 我在 SwiftUI 中做了这个 Contacts swift TestCalendar Created by Christopher Riner on 9 11 2
  • 如何在IOS中的UIStackView中设置权重

    UIStackView与安卓类似LinearLayout但我不知道如何设置子视图的权重 假设我有一个垂直的UIStackView and 3 UIImageView就在里面 我想连续设置权重3 6 1UIImageViews 我怎么做 UI
  • XMPPFramework - 如何创建多用户聊天室?

    我如何使用XMPPFramework在iPhone中实现GroupChat 我尝试了以下代码 但房间没有创建 我如何知道房间是否创建 XMPPRoomDelegate没有被调用 当Stream断开连接时 调用handleDidLeaveRo
  • ios 用户如何取消 Facebook 登录?

    当用户到达此屏幕时 无法取消 我能做些什么 为了首先获得这个视图 我正在运行 NSMutableDictionary params NSMutableDictionary dictionaryWithObjectsAndKeys vid l
  • 使用 iOS 8 自定义键盘发送图像?

    我一直在为 iOS 8 开发自定义键盘 但在尝试使用键盘发送图像时偶然发现了一个问题 我做了一些研究 似乎没有一种简单的方法可以做到这一点UITextDocumentProxy因为只有NSStrings被允许 我是否忽略了使用自定义键盘发送
  • 将永久字符添加到 UITextField

    有没有办法将字母永久添加到 UITextField 中 用户无法删除它 我想添加一个字符 用户无法删除它 但他们仍然可以在之后添加字母 Cheers 附注这是适用于 iOS 的 A UITextField有一个名为 应该更改范围内的字符 的
  • Swift Generics 在使用继承时不会实例化泛型

    我有课Alpha and Berry class Alpha class Berry Alpha 我有一个使用继承及其泛型的函数 func myFunc
  • 如何替换已弃用的方法dispatch_get_current_queue()? [复制]

    这个问题在这里已经有答案了 我正在 iOS 5 中使用 xmppframework 开发一个聊天应用程序 它工作得很好 但我将 Xcode 更新到 4 5 1 将 iOS 5 更新到 iOS 6 将 Mac OS 更新到 10 7 5 但由
  • 如何在 Firebase 控制台中使用 Apple 新的 APN .p8 证书

    随着最近 Apple 开发者帐户的升级 我面临着一个困难 在尝试创建推送通知证书时 它为我提供了 p8 证书 而不是可以导出到 p12 的 APNs 证书 Firebase 控制台仅接受 p12 证书 那么我如何从这些新的 p8 证书中获取
  • 在 WKWebView 中禁用放大手势

    我正在寻找一种方法来禁用 WKWebView 的 iOS 实现上的 捏合缩放 放大手势 OS X 有一个 magnification BOOL 属性 但在 iOS 上似乎不可用 WKWebView h if TARGET OS IPHONE
  • Parse.com 从相关 PFObject 获取 PFUser

    我正在将照片保存为 PFObject 解析 并使用 PFUser currentUser 用户 ID 作为其键之一 我想在表格视图中显示照片以及该 PFUser 的详细信息 但是当我尝试获取用户时 PFUser user self phot
  • 导入 RNCryptor 后架构 armv7 的未定义符号

    我导入了 RNCryptor 可以在这里找到 https github com rnapier RNCryptor https github com rnapier RNCryptor进入我的应用程序 但是 我在日志中收到了三个错误 Und
  • 当地图视图只是屏幕的一部分时,如何在 iOS 模拟器中进行捏合?

    我在 iPad 上有一个视图 我正在添加MKMapView也就是说 全屏高度的一半 然而 当我尝试在 iOS 模拟器上进行捏合时 它不起作用 因为 to nubs 填充了模拟器上的整个 iPad 视图 And so with the map
  • 如何使用 Swift 使用 TouchID?

    Apple 为 iOS 8 的 TouchID 实现提供的文档采用 Objective C 语言 有 Swift 版本吗 Objective C IBAction touchIDAvailable UIButton touchIDAvail
  • 将 Firebase 云消息传递与 Windows 应用程序结合使用

    我在 Android 和 iOS 应用程序中使用 Firebase Cloud Messaging 但是我还有此应用程序的 Windows Mac OS 版本 我想保留相同的逻辑 我知道 Firebase Cloud Messaging 可
  • AVAssetExportSession 为零 iPhone 7 - Plus 模拟器

    AVAssetExportSession在 iPhone 6 及以下版本上运行良好 但在 iPhone 7 iPhone 7 Plus 模拟器上运行不佳 Xcode 8 0 这段代码return nil在exportSession中 当在i
  • 在 iOS 中,如何创建一个始终位于所有其他视图控制器之上的按钮?

    无论是否呈现模态或用户执行任何类型的转场 有没有办法让按钮在整个应用程序中 始终位于顶部 而不是屏幕顶部 有什么方法可以让这个按钮可拖动并可捕捉到屏幕上吗 我正在以苹果自己的辅助触摸作为此类按钮的示例 您可以通过创建自己的子类来做到这一点U
  • 水平 UICollectionView 单行布局

    我正在尝试使用以下命令设置简单的水平布局UICollectionView 兜圈子却没有达到预期的结果 所以任何指针或例子将不胜感激 我粘贴经常更改的代码但没有成功可能没什么意义 该图像显示两行 第一行是单个项目 尺寸正确并且在中心正确对齐
  • Xcode 8 / Swift 3:“UIViewController 类型的表达式?未使用”警告

    我有以下函数 它之前编译得很干净 但在 Xcode 8 中生成警告 func exitViewController navigationController popViewController animated true UIViewCon

随机推荐

  • Zend 表单 ajax 提交验证

    我目前正在尝试同时使用 ajax 和 zend validate 验证 zend 表单 让我解释一下 我的表单在 iframe fancybox 中弹出 提交后 我需要显示一条 谢谢 消息 关闭 iframe 并重定向用户 如果成功的话 我
  • Child_process 抛出错误:写入 EPIPE

    我只是练习一些关于child process the的node js代码link https nodejs org download release v5 2 0 docs api child process html child proc
  • Spring MVC Web 应用程序背后的 zuul 重定向问题

    我有一组 Spring Boot 1 3 3 和 Spring Cloud Brixton RC2 微服务 在 Zuul 后面运行 并且在重定向中重写我的 URL 时遇到问题 我的主要问题是我的网络应用程序位于 zuul 后面 并且在重定向
  • mysqldump 与 db 位于单独的文件中

    我正在编写一个单行命令 将所有数据库备份到各自的名称中 而不是使用将所有数据库转储到一个 sql 中 例如 db1 保存到 db1 sql db2 保存到 db2 sql 到目前为止 我收集了以下命令来检索所有数据库 mysql uunam
  • R ggplot2 aes 参数

    我有一个功能 vis function df x p1 lt ggplot df aes x geom line aes y v2 p1 我有一个数据框 df data frame v0 c 1 2 3 v1 c 2 3 4 v2 c 3
  • FFmpeg drawtext - 无法从文件加载字体[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我尝试使用 FFmpeg 在视频顶部添加简单的文本drawtext范围 每次我要这样做时 都会返回错误 无法从文件 arial ttf 加载字体 无法
  • 如何在 NSIS 中获取命令输出?

    我想知道如何在 NSIS 中获取 execwait 命令的输出 例如 如果我运行tree 我将如何获得输出 这将是实际的树 您不能使用 ExecWait 来做到这一点 您必须使用以下插件之一 nsExec http nsis sourcef
  • 类似亚马逊的界面,用于选择产品尺寸和颜色(即单击一个小红色框来选择红色产品等)

    在我的在线商店中 我想实现一个像Amazon s https rads stackoverflow com amzn click com B000YVES0I用于选择产品尺寸和颜色 即 用户应该看到一堆小框 而不是不同尺寸 颜色的单选按钮
  • 如何在 Swift 中通知队列(GCD)

    我正在使用 GCD 来通知主线程 函数内有 2 个异步调用 My code func getWavesByMostRecent closure escaping Wave gt Void var waves Wave let dispatc
  • 优化 MySQL 中联接中的 OR

    我在 MySQL 中有一个相当复杂的查询 当其中一个连接使用 OR 完成时 查询速度会大大减慢 我怎样才能加快速度 相关的连接是 LEFT OUTER JOIN publications p ON p id virtual performa
  • 创建binder时,Spring Cloud config + 总线对配置服务器调用两次

    我使用 spring cloud config 和 spring cloud bus 创建了一个简单的项目 由于某种原因 配置客户端两次调用配置服务器 第一次发生在创建引导程序的上下文时 预期的行为是什么 但第二次发生在创建绑定器的上下文时
  • 有人可以解释这是如何工作的吗?

    我有这行代码 class ButtonPanel extends JPanel implements ActionListener public ButtonPanel yellowButton new JButton Yellow 它有效
  • 为什么 cout 使用 << 会产生正确的字符串输出,但使用 + 却不会? [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 这显示没有输出 int x 10 cout lt lt Hello C x 但这确实显示了输出 int x 10 cout lt
  • 使用基本矩阵 opencv 确定相机运动

    我尝试使用 opencv 从基本矩阵确定相机运动 我目前正在使用光流来跟踪每个其他帧中的点的移动 基本矩阵是从基本矩阵和相机矩阵导出的 我的算法如下 1 使用良好的特征跟踪功能来检测帧中的特征点 2 跟踪接下来两帧或三帧的点 Lk光流 在此
  • NPM:如何运行安装后?

    只是一个简单的问题 在我的 node js 项目中 我如何只运行安装后脚本 而不运行安装之前 仅供参考 这是我的 package json name gestionclientjs dependencies repository devDe
  • 如何在创建过程中引用同一对象的属性? [复制]

    这个问题在这里已经有答案了 我正在尝试做类似的事情 o a foo 42 b o a 但这会返回一个错误 指出 o 未定义 我知道我以后可以做 o b o a 但我想知道在定义 o 的同时是否可以定义 b 现在这已经是古老的历史了 但我刚刚
  • 如何在 redshift 中将行连接并转置为列

    我有以下table1其独特的关键是type type age A 20 B 21 C 22 我有以下结果表 我想加入他们 type score A 10 A 20 A 30 B 40 B 50 以下转置形式 type age score s
  • 连接 Keras 模型/替换输入但保留层

    这个问题类似于Keras 替换输入层 https stackoverflow com questions 49546922 keras replacing input layer 我有一个分类器网络和一个自动编码器网络 我想使用自动编码器的
  • 使用 List 比 IEnumerable 有什么好处?

    或者相反 我一直使用通用列表 但我偶尔也会听说 IEnumerables 老实说 我 今天 不知道它们的用途以及为什么我应该使用它们 因此 冒着网络上永远有更多东西宣扬我无知的风险 我谦虚地提出这个问题 Well List
  • UIViewController 自定义转换卡在 iOS13 上

    我在 iOS 应用程序中实现了两个视图控制器之间的自定义转换 并且它在 iOS 10 11 和 12 上运行良好 现在我想使用 Xcode 11 beta 6 和 iOS 13 beta 8 为 iOS 13 做好准备 但转换被卡住了 自定