小编Mda*_*ank的帖子

SwiftUI ForEach 未更新 ObservableObject 类数组的更改

背景

在我的应用程序中,我有一系列可以从另一个视图添加的朋友。我已将这组朋友存储在一个类中,该类是ObservableObject. 在我的主视图中FriendListView,我使用ForEach为用户添加的每个朋友显示自定义视图。

我无法添加到数组并让列表显示新项目。根据我能够理解和组合的内容,我尝试了两种不同的尝试。如果有人能够提供任何帮助,我们将不胜感激。我目前有显示第二个视图的方法,我将在其中添加注释掉的新朋友,并且有一种自动保存新朋友的方法作为导航栏项目存在。

尝试

尝试#1

如果在类初始值设定项期间将朋友列表附加到数组中,我就成功地显示了朋友列表。调用类方法从另一个视图添加到数组似乎是可行的,因为我能够打印数组的内容,但 UI 不会更新。

这是通过使用一种ForEach(0..<Array.count)方法完成的,但在添加新项目后我收到以下控制台错误。

错误

ForEach<Range<Int>, Int, HStack<TupleView<(Spacer, FriendView, Spacer)>>> count (4) != its initial count (3).
`ForEach(_:content:)` should only be used for *constant* data.
Instead conform data to `Identifiable` or use `ForEach(_:id:content:)` and provide an explicit `id`!
Run Code Online (Sandbox Code Playgroud)

型号代码

ForEach<Range<Int>, Int, HStack<TupleView<(Spacer, FriendView, Spacer)>>> count (4) != its initial count (3).
`ForEach(_:content:)` should only be used for *constant* data.
Instead conform data to `Identifiable` or use …
Run Code Online (Sandbox Code Playgroud)

xcode ios swift swiftui observableobject

7
推荐指数
1
解决办法
1791
查看次数

有没有办法使用 Geometry Reader 将 SwiftUI 图像的宽度定义为相对于屏幕尺寸?

我正在开发一个示例应用程序来熟悉 Swift 和 SwiftUI,并且希望结合使用自定义视图和 GeometryReader 的复合布局的想法来确定设备的屏幕尺寸。

我尝试构建的页面是一个可滚动的朋友列表,其中每个行项目都是一个按钮,可以选择该按钮来展开列表以查看每个朋友的更多详细信息。我已经构建了按钮和所有包含视图作为FriendView在我的FriendListView. 我已经GeometryReader在 中定义了 2 个视图FriendListView,但不知道如何在 中定义每行的大小FriendView以使其保持适当的大小。

之所以需要这样做,是因为并非用户稍后可以为他们的朋友设置的每个图像都具有相同的尺寸,因此我希望保持一致。我知道我可以设置一个.frame()修饰符并对宽度进行硬编码,但我希望它与屏幕相关,以便在所有手机屏幕上保持一致。

示例:当一行未展开时,图像应占据设备宽度的一半。当它展开时,我希望它占据设备屏幕宽度的四分之一。

截屏

应用视图

示例代码

struct FriendListView: View {
    var pets = ["Woofer", "Floofer", "Booper"]

    var body: some View {
        GeometryReader { geo1 in
            NavigationView {
                GeometryReader { geo2 in
                    List(self.pets, id: \.self) { pet in
                            FriendView(name: pet)

                    }// End of List
                }
                .navigationBarTitle(Text("Furiends"))

            }// End of NavigationView
        }// End of GeometryReader geo1
    }// End of …
Run Code Online (Sandbox Code Playgroud)

xcode ios swift swiftui geometryreader

5
推荐指数
1
解决办法
1903
查看次数

标签 统计

ios ×2

swift ×2

swiftui ×2

xcode ×2

geometryreader ×1

observableobject ×1