问题标签 [uiscene]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
531 浏览

ios - 如何检查当前 iOS 设备是否支持多个场景/窗口?

我正在添加一个“在新窗口中打开”上下文菜单项,它可以在新的UIScene. 当然,我只想在实际支持多个场景的设备上显示该菜单项。

目前我只是在检查设备是否是使用旧的 iPad:

是否有更精确的方法来检查设备是否支持此特定功能?

0 投票
6 回答
7513 浏览

xcode - 如何获取多窗口 SceneDelegate Xcode 11 的当前键窗口等效项?

我正在将适用于 iPadOS 的 iOS13 应用程序转换为 SceneDelegate(多窗口)。

如何从当前的 SceneDelegate 获取当前的 UIWindow?

我知道 a 可以使用UIView.windowor访问当前场景UIViewController.view.window,但是我有一个非 UI 类(AppDelegate),我需要在其中获取窗口(直到 iOS12 的 keyWindow)才能在所有内容之上显示一个小吃店。

我曾经这样做,[UIApplication sharedApplication].keyWindow但现在,当然,这是错误的。

0 投票
1 回答
934 浏览

uiwindow - iOS13中具有多个窗口场景的最顶级视图控制器

我正在使我的应用程序在带有iOS 13的iPadOS上使用多个窗口,据我所知,由于它已被弃用,我无法直接访问窗口,我怎样才能获得最顶层的视图控制器?UIApplication

iOS12之前我使用这个工作解决方案,你能建议一个替代方案吗?

0 投票
4 回答
20524 浏览

ios - 在 iOS 13 中恢复场景的 UI 状态,同时仍支持 iOS 12。无情节提要

这有点长,但它不是微不足道的,需要很多时间来证明这个问题。

我试图弄清楚如何将一个小示例应用程序从 iOS 12 更新到 iOS 13。这个示例应用程序不使用任何情节提要(启动屏幕除外)。这是一个简单的应用程序,它显示了一个带有由计时器更新的标签的视图控制器。它使用状态恢复,因此计数器从它停止的地方开始。我希望能够支持 iOS 12 和 iOS 13。在 iOS 13 中我想更新到新的场景架构。

在 iOS 12 下,该应用程序运行良好。在全新安装时,计数器从 0 开始并上升。将应用程序置于后台,然后重新启动应用程序,计数器将从停止的位置继续。国家恢复一切正常。

现在我正在尝试使用场景在 iOS 13 下工作。我遇到的问题是找出初始化场景窗口并将导航控制器和主视图控制器恢复到场景的正确方法。

我已经阅读了尽可能多的与状态恢复和场景相关的 Apple 文档。我看过与窗口和场景相关的 WWDC 视频(212 - 在 iPad 上介绍多个 Windows258 - 为多个 Windows 构建您的应用程序)。但我似乎错过了将它们放在一起的部分。

当我在 iOS 13 下运行应用程序时,正在调用所有预期的委托方法(AppDelegate 和 SceneDelegate)。状态恢复正在恢复导航控制器和主视图控制器,但我无法弄清楚如何设置rootViewController场景窗口的状态,因为所有 UI 状态恢复都在 AppDelegate 中。

似乎还有一些与NSUserTask应该使用的相关的东西,但我无法连接这些点。

缺少的部分似乎在willConnectTo方法中SceneDelegate。我确定我还需要stateRestorationActivitySceneDelegate. 可能还需要更改AppDelegate. 我怀疑有什么ViewController需要改变的。


要复制我正在做的事情,请使用 Single View App 模板使用 Xcode 11(目前为 beta 4)创建一个新的 iOS 项目。将部署目标设置为 iOS 11 或 12。

删除主情节提要。删除 Info.plist 中对 Main 的两个引用(一个在顶层,一个在 Application Scene Manifest 深处。按如下方式更新 3 个 swift 文件。

AppDelegate.swift:

SceneDelegate.swift:

ViewController.swift:

在 iOS 11 或 12 下运行它,它工作得很好。

您可以在 iOS 13 下运行它,并在全新安装应用程序时获得 UI。但是应用程序的任何后续运行都会出现黑屏,因为通过状态恢复恢复的 UI 未连接到场景的窗口。

我错过了什么?这只是缺少一两行代码,还是我对 iOS 13 场景状态恢复的整个方法都错了?

请记住,一旦我弄清楚了下一步将支持多个窗口。因此,该解决方案应该适用于多个场景,而不仅仅是一个场景。

0 投票
21 回答
107581 浏览

swift - 如何解决:“keyWindow”在 iOS 13.0 中已弃用

我将 Core Data 与 Cloud Kit 一起使用,因此必须在应用程序启动期间检查 iCloud 用户状态。如果出现问题,我想向用户发出一个对话框,并且我一直使用它UIApplication.shared.keyWindow?.rootViewController?.present(...)

在 Xcode 11 beta 4 中,现在有一条新的弃用消息,告诉我:

'keyWindow' 在 iOS 13.0 中已弃用:不应用于支持多个场景的应用程序,因为它会在所有连接的场景中返回一个关键窗口

我应该如何呈现对话框?

0 投票
4 回答
2995 浏览

ipad - 当多个连接的场景在前台处于活动状态时获取当前聚焦的 UIScene

UIScene连接多个场景时,我无法获取电流。

具体来说,我的应用程序(iOS 13)支持 iPad 上的多个窗口。当我有两个并排的窗口并访问应用程序连接的场景(使用UIApplication.shared.connectedScenes)时,它们都activationState设置为.foregroundActive. 但我实际上只与其中一个互动。

我在 stackoverflow 上找到了一些代码来检索当前的关键窗口(不记得是谁发布的),但正如你所见,它总是会返回两个窗口之一。

我是否缺少一些方法来确定与之交互的最后一个窗口,或者多个.foregroundActive状态是否是错误?

谢谢!

0 投票
1 回答
1109 浏览

ios - 每次点击应用图标时,iOS 13 应用都会请求一个新场景

我正在使用多个窗口设置我的应用程序。它运作良好。但是当我从跳板打开我的应用程序时,它每次都会创建一个新窗口。

我正在使用最新的 Xcode 和 iPadOS 13.0 测试版。我所有的视图控制器、视图等都是以编程方式制作的。我唯一的故事板是 LaunchScreen。

信息列表

AppDelegate.swift

SceneDelegate.swift

在Apple的Gallery示例中,如果打开应用程序,滑动到主屏幕,然后再次打开应用程序,我就回到了原来的位置,没有scene(_:willConnectTo)再次调用。在我自己的应用程序上,scene(_:willConnectTo)每次打开应用程序时都会调用它,并且放置断点向我表明,我确实在每次启动时收到了不同的 UIScene 和 UISceneSession 对象。

我没有显示任何 NSUserActivity 代码,因为我首先是因为我还没有任何状态恢复。实施它不会改变任何事情。

如果你有一些想法,我很高兴读到你!

0 投票
0 回答
539 浏览

ios - 如何像使用 AppDelegate (UIApplicationDelegate) 一样获得对场景委托 (UIWindowSceneDelegate) 的引用?

在 iOS 13 之前,当 AppDelegate 为王时,您可以(当然您仍然可以)UIApplication.shared.delegate获取对您的 AppDelegate 的引用。但是,您如何获得对在 iOS 13 中管理单个窗口场景的 UIWindowSceneDelegate 的引用?UIWindowScene.shared.delegate不存在,很明显。

0 投票
1 回答
686 浏览

ios - iOS - 是否有以编程方式创建多个不分割屏幕的窗口?

我正在使用 UIScenes 和 SwiftUI 创建一个简单的应用程序。

我需要以编程方式创建多个窗口,但与 requestSceneSessionActivation 的设计结果不同,它将屏幕分成两部分。我需要另一个,就像图像一样...在此处输入图像描述

我在 UIScene 文档中没有找到任何内容。如果您也知道关闭它的方法,那就太棒了!

0 投票
1 回答
490 浏览

ios - iOS 13 performActionFor shortcutItem 现在在启动时不会在 SceneDelegate 中调用,但在应用启动后会调用。为什么?

performActionFor shortcutItem如果应用程序已经启动,则在我的 SceneDelegate 中调用,但如果应用程序实际上从快捷方式项启动,则不会调用它。为什么是这样?