小编kam*_*pro的帖子

如何在 SwiftUI 中的 NavigationView 中设置 ScrollView 的背景颜色

我无法ScrollView在 SwiftUI下设置背景颜色。当我使用.background(Color.red)背景时,背景被切断,因此它不会进入导航栏,并且滚动似乎被破坏了。我尝试了几个解决方案,但每个都不起作用。我有一个简单的视图层次结构

NavigationView {
    ScrollView([.vertical], showsIndicators: true) {
        VStack {
            ForEach(0...50, id: \.self) { _ in
                Text("Text text")
            }
        }
    }
    .navigationBarTitle("Title", displayMode: .large)
}
.navigationViewStyle(StackNavigationViewStyle())
Run Code Online (Sandbox Code Playgroud)

它按预期工作

在此处输入图片说明

现在,我想添加背景颜色,我尝试了以下解决方案

1

NavigationView {
    ScrollView([.vertical], showsIndicators: true) {
        VStack {
            ForEach(0...50, id: \.self) { _ in
                Text("Text text")
            }
        }
    }
    .background(Color.red)
    .navigationBarTitle("Title", displayMode: .large)
}
.navigationViewStyle(StackNavigationViewStyle())
Run Code Online (Sandbox Code Playgroud)

结果

在此处输入图片说明

2

NavigationView {
    ZStack {
        Color.red
        ScrollView([.vertical], showsIndicators: true) {
            VStack {
                ForEach(0...50, id: \.self) { _ in
                    Text("Text text")
                } …
Run Code Online (Sandbox Code Playgroud)

ios swift swiftui

17
推荐指数
2
解决办法
3830
查看次数

Apple Combine 框架:如何并行执行多个发布者并等待所有发布者完成?

我正在发现结合。我编写了以“组合”方式发出 HTTP 请求的方法,例如:

func testRawDataTaskPublisher(for url: URL) -> AnyPublisher<Data, Error> {
    var request = URLRequest(url: url,
                             cachePolicy: .useProtocolCachePolicy,
                             timeoutInterval: 15)
    request.httpMethod = "GET"

    return urlSession.dataTaskPublisher(for: request)
        .tryMap {
            return $0.data
        }
        .eraseToAnyPublisher()
}
Run Code Online (Sandbox Code Playgroud)

我想多次调用该方法并完成任务,例如:

let myURLs: [URL] = ...

for url in myURLs {
    let cancellable = testRawDataTaskPublisher(for: url)
        .sink(receiveCompletion: { _ in }) { data in
            // save the data...
        }
}
Run Code Online (Sandbox Code Playgroud)

上面的代码不起作用,因为我必须将可取消项存储在属于该类的变量中。第一个问题是:将许多(例如 1000 个)可取消项存储在类似Set<AnyCancellable>??? 中是个好主意吗?不会造成内存泄漏吗?

var cancellables = Set<AnyCancellable>()

...

    let cancellable = ...

    cancellables.insert(cancellable) // …
Run Code Online (Sandbox Code Playgroud)

swift combine

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

标签 统计

swift ×2

combine ×1

ios ×1

swiftui ×1