问题标签 [viewbuilder]

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

swiftui - SwiftUI 和 iOS 13.3 TupleView 初始化程序停止工作。它会发生什么?

我对带有 TupleView 的 ViewBuilders 有这样的初始化

代码运行良好,但从新的 Xcode 11.3 更新 (iOS 13.3) 开始,此代码停止工作,并且未执行带有 TupleView 的构造函数。

这是我如何将 MenuView 与此类初始化程序一起使用:

菜单视图 {

}

但是现在它不起作用这个@ViewBuilder 并且我不认为正确调用 ViewBuilder.buildBlock() 并且这个参数被识别为调用

我找到了解决方法,但它是非常丑陋的代码,而且我们如何使用原生 TabView 还很遥远。

0 投票
1 回答
3876 浏览

ios - SwiftUI 自定义 View 的 ViewBuilder 不会在子类 ObservedObject 更新时重新渲染/更新

我已经研究了几天,搜索了 Swift 和 SwiftUI 文档、SO、论坛等,但似乎找不到答案。

这是问题所在;

我有一个 SwiftUI 自定义视图,它对远程资源的自定义 API 请求类进行一些状态确定。View 处理显示加载状态和失败状态,以及通过 ViewBuilder 传递的主体内容,因此如果来自 API 的状态成功并且资源数据已加载,它将显示页面的内容。

问题是,当子类 ObservedObject 更新时,ViewBuilder 内容不会重新呈现。对象会根据 UI 进行更新(按下按钮时等),但 UI 从不重新渲染/更新以反映子类 ObservedObject 中的更改,例如,子类 ObservedObject 中数组后面的 ForEach 不会刷新数组内容改变。如果我将其移出自定义视图,则 ForEach 将按预期工作。

我可以确认代码编译并运行。观察者和debugPrint()'s 自始至终表明,ApiObject正在正确更新状态,并且 View 反映了ApiState变化。它只是ContentViewBuilder 的。我假设是因为 ViewBuilder 只会被调用一次。

编辑:上面的段落应该是提示,ApiState更新正确,但是在将大量日志记录到应用程序之后,UI 没有监听子类 ObservedObject 的发布。属性在变化,状态也在变化,但 UI 并没有对此做出反应。另外,下一句结果是假的,我在 VStack 中再次测试,组件仍然没有重新渲染,这意味着我找错地方了!

如果是这种情况,VStack其他此类元素如何解决这个问题?或者是因为我ApiObjectView的状态变化被重新渲染,导致子视图“重置”?尽管在这种情况下,我希望它能够接收新数据并按预期工作,但它永远不会重新渲染。

有问题的代码在CustomDataList.swift下面ApiObjectView.swift。我留下评论指出正确的方向。

这是示例代码;

ForEach这是在ObservedObject更改其绑定数组属性时重新呈现其问题的视图。

这是有问题的自定义视图,不会重新呈现其内容。

现在,如果ApiObjectView不使用 并且将内容直接放在 View 中,上述所有代码都可以正常工作。

但是,这对于代码重用和架构来说是可怕的,这样它既漂亮又整洁,但不起作用。

有没有其他方法可以解决这个问题,例如通过 aViewModifierView扩展?

对此的任何帮助将不胜感激。

正如我所说,我似乎找不到任何有此问题的人或任何在线资源可以为我指出解决此问题的正确方向,或者可能导致它的原因,例如 ViewBuilder 文档中概述的。

编辑:为了加入一些有趣的东西,我已经添加了一个倒数计时器CustomDataList,它每 1 秒更新一个标签。如果该计时器对象更新了文本,则重新呈现视图,但当显示倒计时时间的标签上的文本更新时。

0 投票
1 回答
123 浏览

ios - 如何在 SwiftUI 中使用 ViewBuilder 将内容限制为自定义视图/组件上的 Text()

我使用 SwiftUI 创建了一个自定义组件。它类似于类似于文本字段的下拉列表,但是当您点击它时,它将显示一个包含选项列表的工作表。这是选择器的代码:

}

这是从父视图中使用它的方式:

它完美地工作。但我想将视图数量限制为 1,并且它必须是只有 Text()。有没有办法做到这一点?

提前致谢!

0 投票
1 回答
95 浏览

swiftui - SwiftUI:如何使用 SegmentedPickerStyle() 使用 Picker 返回相同的索引

这只是我对 ViewBuilders 和新的 SwiftUI 范式的理解。

我的屏幕顶部有一个“菜单”和几个按钮。

菜单

如果我进行搜索(点击放大镜),当我返回时索引总是返回到 0 并且第一个项目被选中/显示。我想回到被叫走时的同一个索引。我如何记住索引并重置它?

这是主菜单:

}

通常我会编写 UIKit 代码来保存索引并恢复它,但我不确定这样的代码会去哪里,因为 ViewBuilders 不与内联代码合作。什么是公认的做法?

0 投票
2 回答
902 浏览

swift - 在 SwiftUI 中将数据传递到 ViewBuilder 闭包的正确方法是什么?

我在 SwiftUI 中使用泛型,在尝试利用 ViewBuilder 闭包将数据传递到泛型视图时遇到了数据持久性问题。我的目标是拥有一个管理从 API 接收数据并将其传递给通用视图的 shell 视图,如 ViewBuilder 块中定义的那样。所有数据似乎都成功地传递给了 inits,包括我的 generic BasicListView,但是当body被调用时,没有任何列表数据被持久化。

我认为通过代码来解释这个问题会更容易。为这里的长代码转储道歉:

这是 ViewBuilder 块的正确实现,还是不鼓励尝试通过 View builder 块传递数据?

注意:什么工作

如果我直接传入静态 Mock 数据,视图将正确绘制自己,如下所示:

有任何想法吗?感谢大家的帮助和反馈。

0 投票
1 回答
100 浏览

ios - (SwiftUI) 如何访问我在 ViewBuilder 中的一个数组中找到的匹配项?

我有两个数组。

两个对象都具有属性“名称”

在我的视图中,我想检查机器数组中是否存在 maschineItem 的名称。我想为机器中存在的所有 maschineItems 制作一个“light Bubble”,为机器中不存在的所有 maschineItems 创建一个“dark Bubble”。

这是我的代码(有效):

现在我想让 Bubbles 包含有关机器的信息。所以我必须在 if 语句之前初始化匹配,不是吗?但是当我这样做时:

我在 if 语句的行中收到以下错误:

我该如何解决这个问题?我进行了很多研究,发现了类似的线程,这表明我必须使用该array.first(where: {})方法,但我没有发现任何可以帮助我解决这个问题的方法。是的,我试图创建一个函数,因为视图中的逻辑是错误的。但是当我将所有这些都写在一个函数中时,就会发生同样的错误。

我真的很感谢所有试图帮助我的人。PS:我是德国人,对不起英语:D

0 投票
3 回答
2334 浏览

ios - 有什么方法可以在 SwiftUI 中使用 @ViewBuilder 创建/提取视图数组

我正在尝试创建一个简单struct的接受视图数组并返回VStack包含这些视图的普通视图,但它们都是对角堆叠的。

代码:

现在这很好用,但每当我不得不调用它时,我总是很生气:

在这样的数组中列出视图对我来说似乎非常奇怪,所以我想知道是否有一种方法可以@ViewBuilder用来调用我的LeaningTower结构:

如果有一种方法可以@ViewBuilder用来创建/提取视图数组,请告诉我。

(即使实际上不可能使用@ViewBuilder任何使它看起来更整洁的东西也会有很大帮助)

0 投票
4 回答
1229 浏览

swiftui - 如何在 SwiftUI 视图中执行非视图代码

我一遍又一遍地为此苦苦挣扎,所以我想我错过了一些东西。我需要进行数学运算、进行设置、分配值或任何一系列简单操作以响应某些用户操作,例如此处显示的示例,而 SwiftUI 想要一个我不需要视图的视图。必须有办法绕过 ViewBuilder 的规则。我通过创建一个不必要的视图并在视图的 init() 中执行我需要的代码来解决这个问题,但这似乎非常尴尬。

0 投票
0 回答
115 浏览

ios - Xcode 12 中的 SwiftUI @ViewBuilder 问题无法在 View 扩展中编译项目

您好我在 Xcode 12 Beta 1-6 (SwiftUI 2.0) 中的项目/构建编译中遇到问题,在场景中,modifierView扩展中具有自定义。

正如您在代码片段中观察到的那样,一旦我@ViewBuilder从参数列表中删除,我就可以编译并运行 build。如果参数中存在此属性,那么我将面临以下编译错误(Type of expression is ambiguous without more context)

在此处输入图像描述

我认为 SwiftUI 1.0 (Xcode 11) 没有任何问题,你们中有人看到这个问题吗?&可能是什么原因。任何提示将不胜感激。

谢谢

0 投票
1 回答
287 浏览

swift - 如何在 SubView SwiftUI 中使用 BaseView @State 属性

我有一个类似这样的 BaseView,我想为我的所有子视图添加警报机制

这是我的子视图。

我可以做这样的事情吗?如果是,我该怎么办?