我无法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)
它按预期工作
现在,我想添加背景颜色,我尝试了以下解决方案
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)
结果
NavigationView {
ZStack {
Color.red
ScrollView([.vertical], showsIndicators: true) {
VStack {
ForEach(0...50, id: \.self) { _ in
Text("Text text")
} …Run Code Online (Sandbox Code Playgroud) 我正在发现结合。我编写了以“组合”方式发出 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)