问题标签 [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 投票
2 回答
434 浏览

ios - iOS 13 UIWindowScene 如何锁定方向?

我想使用 SceneDelegate、UIWindowScene、UIWindowSceneDelegate 和其他 UIScene 相关的东西。

如何动态锁定此窗口的方向?例如portrait仅用于?动态意味着在运行时当用户与某物交互时,方向锁定回所有。

例如,对于屏幕 A,我只需要锁定纵向。对于屏幕 B 仅横向。

0 投票
4 回答
3063 浏览

ios - `scene(_scene: UIScene, continue userActivity: NSUserActivity)`在用户点击通用链接后启动应用程序时不会被调用

scene(_ scene: UIScene, continue userActivity: NSUserActivity)用户单击通用链接后启动应用程序时不会调用方法。

当用户单击通用链接后再次打开已启动的应用程序时,它工作正常。示例代码:

我尝试使用application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration,但是当用户单击链接时它永远不会被调用:

我尝试使用scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions)

我还尝试了以下方法:

scene.userActivity总是零在那里,我不能得到userActivity.webpageURL

我们如何识别链接被点击并且应用程序被启动(不仅仅是打开)?

0 投票
4 回答
1174 浏览

ios - 在 iOS 13 中使用 UIScenes,我如何 AirPlay 镜像屏幕(似乎默认为外部显示)

如果我在 iOS 12 设备(不使用 UIScene)和 AirPlay Mirror 上编译到我的 Apple TV,则应用程序会按预期镜像到电视上。

在 iOS 13 设备上,它似乎将其视为外部显示器,并对其进行格式化以适应屏幕(但我无法控制它)。

我更喜欢只是镜像它的旧功能。

如何在 iOS 13 上完成镜像?我在文档中四处寻找:

并且在其中UISceneConfiguration有一个role属性(UISceneSession.Role.windowExternalDisplay当我尝试 AirPlay Mirror 时它有),但它似乎没有任何价值,例如UISceneSession.Role.windowMirror.

0 投票
1 回答
620 浏览

ios - 上下文菜单块拖放到新窗口

这个 iPadOS/iOS 13 应用程序实现了多个窗口和拖放。在几乎所有情况下,两者都能完美运行。

我们在实现 UITableViewDelegate 的上下文菜单方法的表视图中遇到了唯一的问题。

如果我们在上下文菜单出现之前启动拖动,那么我们可以通过将项目移动到屏幕边缘成功地将项目拖动到新窗口(UIScene)中。但是,如果我们在上下文菜单出现启动拖动,则无法将项目拖动到新窗口或场景中。

有谁知道问题的根源是什么?

以下是展示问题的两个对比视频:

失败

这是拖放失败。

成功

这是拖放成功。

0 投票
0 回答
473 浏览

ios - 如何决定在 iOS 13 上为 userNotificationCenter:openSettingsFor: 打开通知设置的窗口?

iOS 具有以下被调用的方法,因此您可以通过通知中心或设置应用程序向用户提供自定义通知设置:

在其中您将打开一些应用内设置视图控制器。

在 iOS 12 上这很容易,找到活动窗口,找到 rootViewController 并将设置屏幕扔到它上面。

在 iOS 13 上,您(可以)有多个窗口,所以我假设可以在其中任何一个窗口上调用此方法?

假设您在后台打开了 5 个应用程序窗口,然后打开“设置”应用程序并请求应用程序的通知设置。它使用哪个窗口?我怎么知道要将设置屏幕添加到哪个窗口/视图控制器?我不想随机选择一个,然后不小心将其添加到背景中的一个,而不是打开的那个。

UNNotificationResponse另一方面,确实有一个targetScene方法,因此如果您的应用程序是从通知中打开的,您可以知道要使用哪个窗口,但这种方法似乎缺少它。

我是否应该遍历应用程序可用的所有窗口场景并在前台找到一个?

0 投票
1 回答
356 浏览

swift - iOS 13 isKeyWindow 总是返回 nil

我想知道为什么:

在模拟器和设备上总是返回 nil。您可以通过在任何视图控制器的 viewDidLoad 中放置一个断点并将对象打印到控制台来确认这一点。

我可以获得“keyWindow”的唯一方法是获得

但是没有明确提到它是关键。如果 iPad 拆分视图上有我的应用程序的多个实例怎么办?

有任何想法吗?

我的想法是,如果只有一个窗口,则默认情况下它是关键窗口,如果您在 iPad 上运行多个窗口,则当前正在与之交互的窗口将成为关键窗口,但是,我还没有对此进行测试。

0 投票
1 回答
2371 浏览

ios - 在 iPad 上使用 window.overrideUserInterfaceStyle 时未启用/禁用暗模式

我已经通过调用window.overrideUserInterfaceStyle我的应用程序成功实现了暗模式切换。在真 iPhone 或模拟器中运行应用程序时,该功能运行良好。

但是当我在 iPad 上运行相同的脚本时,只有view.overrideUserInterfaceStyle工作。如果我尝试使用window.overrideUserInterfaceStyle它,它不会更新特征集合(也不会调用traitCollectionDidChange(_).

改变我正在做的风格(从白色到深色的风格):

当上面的代码执行时,它应该替换UIColor为浅色和深色样式配置的所有 UIViews 的颜色。也叫traitCollectionDidChange(_). 但是这些动作都没有发生在 iPad 模拟器上。

上面的代码只适用于 iPhone 真实/模拟器,它也应该适用于 iPad 模拟器。我这里没有任何支持深色风格的 iPad。

也许这是模拟器上的错误?

我还尝试创建一个示例应用程序,样式更改确实适用于 iPad,但由于它是一个没有库的干净项目,它应该可以工作。

我也在尝试最小化我的应用程序,但仍然无法正常工作,所以我担心它是否是一个库会造成冲突。

使用UIApplicationsetup 而不是UIScene.

我将 Xcode 11.3 和 Swift 5 与一些 Cocoapod 库一起使用。

0 投票
0 回答
208 浏览

ios - 新请求场景的 NSUserActivity 没有用户信息

在我的应用程序中,我有一个表格视图,其中每个单元格代表一个文件 URL。用户可以点击一个单元格,然后UIScene将打开一个代表该文件的新单元格...

正如您在上面的代码片段中看到的,我将 URL 存储在NSUserActivity传递给UIScene.

我的问题是userInfo在新场景中总是空的。

调试器命令...

我通过设置用户活动的标题进行了实验(我不在我的应用程序的任何地方使用活动标题)。标题确实进入了新场景,确认我正在查看的用户活动是正确的。

0 投票
2 回答
282 浏览

swift - macOS Catalyst configurationForConnecting UISceneSession 委托函数并不总是在应用启动时调用

我正在构建一个支持多个窗口的 macOS Catalyst 应用程序,该应用程序是通过UISceneDelegateiOS 13 中引入的新 API 集实现的。

根据Apple 的文档,在创建新窗口时,需要连接到场景委托UISceneSession,这允许通过其userInfo属性将信息传递给该会话。userInfo在连接场景委托之前设置的一种方法是在以下功能中UISceneDelegate

查看此功能的开发人员参考页面,似乎应该始终在应用程序启动时调用它,然后再设置主应用程序的场景。不幸的是,对于 macOS Catalyst,这似乎不是真的,但我找不到任何文档或逻辑来解释为什么不总是调用这个函数。在我的应用程序中,它重用了简单的示例代码UISceneDelegate,这个函数在应用程序启动时大约有 50% 的时间被随机调用。这不是很好,因为这意味着随机 50% 的时间应用程序的窗口没有正确设置,因为所需的信息没有userInfoUISceneSession.

application(_:configurationForConnecting:options:)调用macOS Catalyst 的第一个应用程序场景的调用或如何强制在应用程序启动时确定性地调用它的确切逻辑是什么?

0 投票
1 回答
200 浏览

ios - UIScene userActivity 为零

我有一个(催化剂)应用程序,它可以有几个窗口。我创建了一个按钮,如果用户按下此按钮,应用程序将创建一个新窗口。要知道,需要显示什么View,我有不同的NSUserActivityactivityTypes。在新窗口中应该有一个按钮,可以关闭这个新窗口。问题是,在循环打开的会话时,所有 userActivities 都是nil(我需要正确UISceneSessionUIApplication.shared.requestSceneSessionDestruction.

这是我的代码: