【发布时间】:2023-03-24 17:05:02
【问题描述】:
视图由 SwiftUI 组成,List 包含几行,每行包含一个带有项目的 ScrollView。它类似于 Apple 的 SwiftUI Landmark 教程 (https://developer.apple.com/tutorials/swiftui/composing-complex-interfaces)。当我旋转设备(在真正的 iPhone XS 上测试)时,ScrollView 的内容消失了。当我将 ScrollView 替换为另一个元素(例如 Text)时,此问题不存在。因此,这个问题一定与 ScrollView 的使用有关。请参阅下面的屏幕截图和 SwiftUI 代码。
行为
代码
struct ContentView: View {
@FetchRequest(
entity: InsigniaContainer.entity(),
sortDescriptors: [
NSSortDescriptor(keyPath: \InsigniaContainer.sort, ascending: true),
],
predicate: NSPredicate(format: "parentContainer == NULL")
) var insigniaContainers: FetchedResults<InsigniaContainer>
var body: some View {
NavigationView {
List {
ForEach(self.insigniaContainers, id: \.objectID) { (insigniaContainer: InsigniaContainer) in
ServiceBranchRow(serviceBranch: insigniaContainer)
}
.listRowInsets(EdgeInsets())
}
.navigationBarTitle("Armed Forces")
}
.navigationViewStyle(StackNavigationViewStyle())
}
}
struct ServiceBranchRow: View {
var serviceBranch: InsigniaContainer
var body: some View {
VStack(alignment: .leading, spacing: 0) {
Text(self.serviceBranch.wrappedName)
.font(.headline)
.fontWeight(.heavy)
.padding(.leading, 15)
.padding(.top, 10)
Spacer()
ScrollView(.horizontal, showsIndicators: false) {
HStack(spacing: 15) {
ForEach(self.serviceBranch.sortedChildContainers, id: \.objectID) { item in
NavigationLink(destination: InsigniaList(insigniaContainer: item)) {
ServiceBranchItem(item: item)
}
}
}
.padding(10)
.padding(.leading, 5)
.padding(.trailing, 5)
.padding(.bottom, 5)
}
}
}
}
【问题讨论】:
-
我没有 iPhone XS,在模拟器上可以重现吗?
-
@Asperi 是的,它也可以在模拟器上重现。
-
然后,我想,原点在您的自定义子视图中,因为我在提供的快照中将它们替换为 160x100 尺寸的
Rectangle()并使用 iPhone X 模拟器(Xcode 11.2 / iOS 13.2),一切正常。 -
将 ScrollView 的全部内容,即 HStack 替换为 Rectangle().frame(width: 230.0, height: 150.0),但没有任何变化。
-
你忘记了太空部队。