问题标签 [view-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.
ios - 由于奇怪的 UINavigationBar 视图层次结构,自定义 UINavigationBar 不起作用
我的应用程序有许多被推送到导航堆栈上的 ViewController。
我已经在 AppDelegate 中全局配置了 UINavigationBar 外观,如下所示。
除了只有一个 ViewController 之外,所有 ViewController 都按预期工作。
以下是按预期工作的 VC 之一。它显示了我想要的颜色和字体。
下面是显示不同外观的 ViewController。
我不明白为什么这个 VC 上只有一个导航栏显示不同的外观。
所以我已经完成了调试视图层次结构。
下面是按预期工作的 VC 的视图层次结构。
下面是显示奇怪外观的 VC 视图层次结构。
如图所示,有问题的 NavigationBar 多了两层,UIVisualEffectView 和 UIVisualEffectBackdropView。
我是一位经验丰富的 iOS 开发人员,不知道为什么会发生这种情况。
我仔细检查了IB上与NavigationBar相关的所有设置,但发现与其他设置没有区别。
我什至删除了 ViewController,完全嵌入 NavigationController 并从头开始重建它们,但没有运气。
请有人解释一下为什么只有这个 NavigationBar 有不同的结构。
我正在使用 iOS 13.3 和 Xcode 11.3.1
swift - 子视图控制器应该有父视图控制器,但实际父视图控制器是(UIViewControllerHierarchyInconsistency)
我有一个将 UITabbarController 作为初始窗口的应用程序(登录后我将其设置为 rootViewController)
这个 tabbarController 有 4 个不同的选项卡,它们都是嵌入在 UINavigationController 中的 UIViewController。
在我的 tabbarController 中,当我进行初始配置时,我设置了如下标签:
首先我创建viewControllers:
/li>然后我将它们嵌入到导航控制器中:
/li>最后,将 navigationControllers 添加为 tabbarController 的 viewControllers
viewControllers = [navController1,navController2,navController3,navController4]
我在网上查了一下,这种使用方式似乎是正确的。例如:https ://medium.com/@ITZDERR/uinavigationcontroller-and-uitabbarcontroller-programmatically-swift-3-d85a885a5fd0 。但是我从我的实时应用程序收到崩溃日志,如下所示
这里的问题是崩溃说profileViewController应该是navigationController的父级但是我在navigationController中嵌入了profileViewController并添加为tabbarController的viewControllers,所以在我看来这个顺序是正确的。
我搜索了此崩溃,似乎我正在跳过使用 addChildViewController 或在某处删除父级的步骤,但无法弄清楚。
我找到了与此相关的链接,但没有一个帮助我解决了这个问题。
示例链接:
animation - SwiftUI - 响应父视图中的点击
TL;博士:
我想在(父)状态改变时触发一个动作。这在声明性上下文中似乎很困难。
评论
这里的挑战是我不想让一个视图的属性依赖于另一个视图。那是覆盖良好的领域。我可以(并且已经)整天阅读有关共享状态更改的信息。但这是一个事件。
我遇到的最好的是arsenius。他的方法确实有效。我想知道是否有更被动的方式来做到这一点。也许是一击Publisher
?看起来很粗略。
代码
“事件”在 FRP 中并不总是一个肮脏的词。我可以通过处理同一View
事件来启动 a 的动画: View
但我希望这View
是可组合和可重复使用的。将其插入到更大的层次结构中似乎是合理的,它对何时运行动画有自己的想法。我所有的“解决方案”要么在View
更新期间改变状态,要么甚至无法编译。
SwiftUI 肯定不会强迫我不要分解我的层次结构吗?
解决方案
这是arsenius 的建议。有没有更 Swifty-UI 的方式?
ios - 由于我的视图层次结构,显然没有调用 viewWillAppear
这似乎是一个有据可查的问题,但在线解决方案没有奏效。这只是未能为我提供有效答案的帖子的示例列表:
- ViewWillAppear 不执行代码
- viewWillAppear 没有被调用
- viewWillAppear 未调用
- UINavigationController 继承,ViewWillAppear 未调用
- 在 popToViewController 之后未调用 viewWillAppear
- iPhone viewWillAppear 未触发
我发现我的 viewWillAppear 没有被调用的问题与我的视图层次结构有关。我使用的选项卡控制器不是视图层次结构的最高部分。选项卡控制器的视图控制器之一是导航控制器的根视图控制器。这就是我试图获得工作 viewWillAppear 或 viewDidAppear 的地方。这是我尝试过的但没有奏效的方法。在选项卡控制器中,我添加了以下代码:
在场景委托中,这是我的代码:
swift - 如何在代码中找到 UIView 的创建位置 - swift - 以编程方式
如果我看到一个UIView
inDebug View Hierarchy
但我不知道它来自哪里,有没有办法查看它是在哪里以编程方式在代码中创建的?
这个问题描述并解释了相反的情况(你有视图的代码,你会看到它在视图层次结构中的位置)。
如何使用Debug View Hierarchy
?
swift - SwiftUI 中的 VideoPlayer 在父视图更新时停止播放
使用 Swift5.3.2、iOS14.4.1、Xcode 12.4、
我在 SwiftUI 中成功运行了 VideoPlayer。
我正在使用以下代码调用 Player 视图:VideoPlayer(player: AVPlayer(url: url))
.
问题是,只要 VideoPlayer 的父视图更新(即重新渲染),视频就会停止播放。
由于在 SwiftUI 中我无法控制何时发生这种重新渲染时刻,所以我不知道如何克服这个问题。
有任何想法吗 ?
这是整个代码:
VideoPlayer 视图是这样调用的:
MediaTabView 是这样调用的:
PageViewiOS 视图是这样调用的:
swiftui - 由于 SwiftUI 重新渲染父视图,TabView 在旋转到横向时断开连接
使用 Swift5.3.2、iOS14.4.1、XCode12.4、
如以下代码所示,我在 SwiftUI 的 Page-Mode 中使用了一个相当复杂的 TabView。
即使用 iOS14 显示页面的新可能性:
一切正常。
除非,如果我将 iPhone 从纵向旋转到横向,TabView 会断开连接并将 selectedTab 索引设置为 0(即,无论您滚动到哪里,旋转 iPhone 都会意外地重置为第 0 页)。
父视图本身处于复杂的视图层次结构中。并且在 TabView 显示(和滑动)期间更新 TabView 的父视图之一。这可能是 TabView 在旋转到横向时重新渲染的问题。
在 iPhone 旋转期间我能做些什么来保持 TabView-Page ?
这是代码:
以及有问题的 MediaTabView:
swiftui - 同时手势不适用于 SwiftUI 中的 ZoomableScrollView
使用 Swift5.3.2、iOS14.4.1、Xcode12.4、
我正在尝试.simultaneousGesture
在 SwiftUI 中使用修饰符。
据我了解,此修饰符应确保手势(例如点击、长按、放大等)应该能够在视图中共存。
在我的示例中,我使用的是 ZoomableScrollView。只要我不使用simultaneousGesture
.
但是,一旦我使用了额外的同步手势,ZoomableScrollView 就不再是“可缩放的”(即,它的手势都不再起作用了)。
我该怎么做才能使缩放仍然有效并获得额外的 dragGesture ?
ZoomableScrollView 的代码在这里: