问题标签 [uiview-hierarchy]

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 回答
517 浏览

ios - iPad 上的窗口层次结构中的 PGHostedWindow 是什么以及如何防止它们的创建?

好的。这是问题。我有 tabBar 控制器,在索引 0 的选项卡中,我有一个 TableView,其中的单元格显示 AVPlayerViewController 的视频。对于 iPhone,当我打印 UIApplication.shared.windows 的内容时 - 它只有 2 个窗口 - UIWindow 和 UITextEffectWindow。但对于 iPad - 它有 UIWindow、UITextEffectWindow 和几个 PGHostedWindow(3-4 取决于带视频的单元格的数量)。那些 PGHostedWindows 是什么?在我看来,当 AVPlayer 的视图添加到单元格的视图层次结构时,他们正在与 AVPlayer 一起创建 - 这让我想到它可能与 iPad 以“画中画”模式显示视频的能力有关。但即使我将 AVPlayerViewController 的allowPictureInPicture 设置为false - 这些窗口仍在创建。最糟糕的部分 - 即使我从可见区域滚动带有视频的单元格,或者转到另一个选项卡 - 那些 PGHostedWindows 也不会被释放。所以问题是 - 那些 PGHostedWindows/ 是什么以及如何防止它们的创建?

0 投票
1 回答
4020 浏览

ios - 在 UIScrollView 中嵌入 UICollectionView 几乎可以完美地工作

背景

我在 a 中嵌入了UICollectionViewa UIScrollView,它几乎可以完美运行。

目标

可滚动元素到达其 contentViews 的末尾后应该无缝地通过滚动。当我在 UIScrollView 上向下滑动时,它应该向下滚动,以便 UICollectionView 占据大约 90% 的屏幕,然后继续滚动 collectionView。反之亦然,当我在 collectionView 上向上滚动并到达 collectionView 内容的顶部时,scrollview 应该开始向上滚动。

问题

1) 当我在 collectionView 上向上滚动时,它会滚动到顶部并停止。如果我向下轻弹几次,它仍然会反弹 collectionView 而不是向上滚动 scrollView。为了让父 ScrollView 向上滚动,我必须再次“故意”点击 collectionView 一次。

见动图:
双弹跳

我想这与它有关,CancelContentTouches但我无法获得正确的组合。

2)当我向下滚动时,同样的事情,一旦滚动视图到达 contentView 的末尾,它就会停止并反弹。

见动图:
向下滚动并坚持

注意:我意识到不建议将 UICollectionView 放在 UIScrollView 中。我尝试了下面列出的替代方案,但我无法通过将我的顶视图放在标题中来达到预期的效果。我希望能够独立滚动两者,所以我决定使用 scrollview/collectionView 组合。

查看层次结构

MainViewController
- ScrollView
- Profile Stats
- CollectionViewContainerView
--- CollectionView

其他人出于某种原因希望将 collectionViews 放入 scrollViews 的资源:
我尝试了它们,但它们不适用于我的用例。

0 投票
1 回答
148 浏览

ios - (Swift) 在嵌套在 Main UINavigationController 中的 UINavigationController 和 UITabController 之间切换

通过storyboard,应用程序入口点是一个单独的入口点UINavigationController,它对用户身份验证执行一些逻辑,以首先确定是推送 Home 视图的嵌入式UITabBarController还是呈现 Sign-In/Sign-Up 视图的嵌入式UINavigationController- 这我没意见。

UINavigationController我遇到的困难是如何正确地在登录/注册时嵌入的登录/注册视图和注销时嵌入的主页视图之间来回进行直接转换UITabBarController。我认为冲突在于处理原始rootviewcontroller条目以推送/呈现上述视图以及rootviewcontroller嵌套UINavigationController在登录/注册视图中的“关系”。

我不知道如何rootviewcontroller为这些直接转换从原版推送/呈现。如果有人可以帮助澄清,是否正在使用appdelegate等,将不胜感激!

故事板 UI 流程

0 投票
0 回答
84 浏览

ios - UITabBar 在旋转过程后更改视图层次结构。(或更改其在视图层次结构中的位置)

我有一个带有几个子视图的视图(只有一个特性,我将 tabBar 作为子视图添加到 VC 视图中)

当我旋转设备时发生了一些奇怪的事情(对我来说)。1)纵向方向一切正常。所有子视图都按应有的方式位于层次结构链中。(尤其是 UITabBar)在此处输入图像描述 ,但是在旋转过程到横向 UITabbar 与 UIView 分离之后,当然关于 pageControl 底部的约束:tabBarController?.tabBar.topAnchor 消失了。 在此处输入图像描述 为什么会这样?

0 投票
0 回答
574 浏览

ios - 当子视图控制器呈现模态视图控制器 iOS Swift 时,容器视图控制器消失

我是 iOS swift 场景的新手,我希望您能够帮助我找到解决方案,或者让我找到实现此目标的替代路线。

这是我的应用程序接口结构图

所以,我有一个 ContainerVC,它有一个 UIScrollView,而那个 UIScrollView 里面有四个 ChildVC。我的问题是,当我从 ChildVC 中的一个 ContainerVC 中呈现 ModalVC 时,ContainerVC 具有 UIScrollView 并且应用程序的背景完全从屏幕上消失,并且应用程序的背景变为黑色。我相信发生这种情况是因为 iOS 认为 ContainerVC 不再被使用,因此当模态显示在 ChildVC 之上时,它会将其从层次结构中删除。

我希望能够拥有 ContainerVC,它为应用程序和嵌入 ChildVC 的 UIScrollView 提供背景,即使 ChildVC 以模态方式呈现 ModalVC 也始终可见。在呈现 ModalVC 之前,可以在 ChildVC 后面围绕屏幕的边缘(模态啊啊啊)看到 ContainerVC,一切都很好,但是当我触发点击事件并呈现模态时,情况会发生变化。这是之前和之后: 点击事件之前>>> 点击事件和ModalVC出现之后

您可以看到紫色背景消失了,现在 ModalVC 出现了,虽然您看不到它,但我无法再滚动侧面,因为 UIScrollView 也不存在。

如何在不丢失 ContainerVC 及其 UIScrollView 的情况下从 ChildVC 呈现 ModalVC?即从消失并保持视图层次结构

这是用于呈现来自给定 ChildVC 的 ModalVC 的代码。

我一直在寻找解决方案一段时间,但我似乎无法弄清楚。如果您能帮助解决这个问题或帮助找到解决方法并实现相同的目标,我会很棒。请帮帮我。

先感谢您。如果有什么我可以做的来澄清任何事情,请告诉我。

0 投票
1 回答
1340 浏览

ios - iOS:如何用容器视图覆盖状态栏

我的主视图控制器中有以下视图层次结构:

主视图->容器视图- > 容器视图中的页面视图控制器->每个页面的项目视图控制器

我需要制作项目视图控制器将他的视图放在主视图控制器的状态栏上方。我添加了从容器视图顶部到主视图顶部的约束(不是顶部布局指南):

顶部约束

但是项目视图控制器仍然将他的视图(图片上的绿色)放在状态栏下:

绿景

我可以做些什么来获得所需的行为吗?我需要状态栏被项目视图控制器的视图覆盖,而不是其他视图控制器的任何视图。

谢谢。

0 投票
2 回答
907 浏览

ios - _UIRemoteView - 在 Xcode 中显示视图层次结构

我想看看 Apple 的 UI 框架是如何组成的,尤其是ContactsUI. 但是,当我尝试在 Xcode 中调试视图层次结构时,我只看到空白的_UIRemoteView.

有什么办法可以窥视联系人作曲家视图的视图层次结构?

左边- 作曲家的样子。
右侧- 在 Xcode 视图层次结构调试器中可见的内容

在此处输入图像描述

0 投票
1 回答
1724 浏览

ios - 由于 iOS 中“不同”视图层次结构中的锚点,自动布局约束崩溃,但是

我正在使用Swift 4.1的iOS 11.X应用程序,完全编程。使用Xcode 9.4

我试图使视图居中(水平),到视图顶部的距离为 10 pts,并具有旋转支持。

应用程序架构有常规的东西,如下(没有故事板):

  • 以 UIWindow 对象和 UINavigationController 作为根的 AppDelegate
  • navigationController 有一个 UIViewController() 作为 rootViewController

鉴于在横向模式下,statusBar不可见并且为了简化自动布局配置,我决定添加一个顶部锚点navigationBar如下(为了清晰起见,代码被简化):

结果符合预期。它可以很好地旋转,并且如果应用程序以横向或纵向(在设备和模拟器中)启动,它也可以正常工作。

肖像 在此处输入图像描述

景观 在此处输入图像描述

现在。GitHub 中的 FastForward 1 提交,整体 App View 架构没有变化,代码相同,它崩溃并显示以下消息

*** NSGenericException',原因:'无法使用锚激活约束,因为它们没有共同的祖先。约束或其锚点是否引用不同视图层次结构中的项目?那是违法的。

知道这里可能会发生什么吗?我从以前的 GitHub 提交中下载了 .zip 以将其隔离并重新确认它是否有效!!。但是当前提交失败,没有对与 this 相关的代码进行任何更改UILabel

导航栏是UIWindow-> UILayoutContainerView->的一部分UINavigationBar

  • 为什么 Xcode 抱怨 NSLayoutYAxisAnchor 锚?(我只有centerX和top anchors)
  • 为什么 navBar.bottomAnchor 的 label.topAnchor 在之前的提交中有效(即使它们不在同一个视图层次结构中)?
0 投票
1 回答
398 浏览

ios - 避免视图控制器的多个实例创建

我有一个自定义视图控制器,我在其中创建了一个带有多个按钮的自定义导航栏。我使用该自定义视图控制器作为多个子控制器的父级(在多个控制器中使用相同的导航栏)。我正在导航到 someController一些按钮点击。问题是,每次单击该按钮时都会创建该视图控制器的实例。当我导航返回时,会显示相同的控制器。

这是菜单按钮单击的操作:

这是后退按钮单击的操作:

我试过 viewController.view.window 但问题是每次按下按钮时都会创建 baseViewController 的新实例。如何避免创建多个实例?我没有使用导航控制器。

如何知道该控制器已在此场景中呈现。

0 投票
1 回答
29 浏览

ios - 在点击通知时弹出弹出问题(深度链接)

我已经在屏幕上展示了一个控制器,现在单击主页按钮。然后我需要在使用深度链接点击通知后展示另一个控制器。当应用程序进入前台时,新的控制器也不会出现,之前的控制器也会被解散。也低于警告:-

我正在使用下面的代码来呈现。