SwiftUI NavigationView和List的使用
程序员文章站
2024-03-24 13:04:22
...
稍微了解一点
SwiftUI
的都知道,SwiftUI
中一些控件的子视图数量(⚠️这里说的数量是指写成特别死的一个一个子视图)是有限制的,一般不超过10
个
例如:VStack
HStack
ZStack
Group
List
未来的容器
本博客就是一个记录关于
List
中子视图数量超过10个的解决方案
我这里结合了
NavigationLink
的使用,一般在网上找到的都是同一个视图循环,向里面塞内容,我这里有点特殊,每一个导航进去的新视图都是一个单独swift
文件,实现的时候遇到的问题是每一个视图不知道用什么类型,后来查了很多地方才找到解决方法。使用AnyView
类型的擦除包装器,另外创建对象的时候需要显式使用AnyView
。
//
// VLAPUIView.swift
// SwiftUI_Base
//
// Created by 先森 L on 2021/5/9.
//
import SwiftUI
struct MyLink: Identifiable{
var id = UUID()
let linkName: String
//下面使用AnyView类型的擦除包装器
let linkView: AnyView
}
struct NLinks{
var links: [MyLink]
}
struct VLAPUIView: View {
var nLinks = NLinks(links: [
//下面创建对象是需要显式使用AnyView
MyLink(linkName: "Stacks 和 Lazy Stacks", linkView: AnyView(StacksUIView())),
MyLink(linkName: "Grids", linkView: AnyView(GridsUIView())),
MyLink(linkName: "Displaying Data in Lists", linkView: AnyView(DataInListsUIView())),
MyLink(linkName: "Lists and Scroll Views", linkView: AnyView(ListsAndScrollUIView())),
MyLink(linkName: "Container Views(Form)", linkView: AnyView(CV_FormUIView())),
MyLink(linkName: "Container Views(Group)", linkView: AnyView(CV_GroupUIView())),
MyLink(linkName: "Container Views(GroupBox)", linkView: AnyView(CV_GroupBoxUIView())),
MyLink(linkName: "Container Views(Section)", linkView: AnyView(CV_SectionUIView())),
MyLink(linkName: "Hierarchical Views", linkView: AnyView(HierarchicalUIView())),
MyLink(linkName: "Architectural Views", linkView: AnyView(ArchitecturalUIView())),
MyLink(linkName: "Presentations", linkView: AnyView(PresentationsUIView()))
])
var body: some View {
List{
ForEach(nLinks.links){link in
NavigationLink(
destination: link.linkView,
label: {
Text(link.linkName)
})
}
}
.navigationBarTitle(Text("View Layout And Pressentation"))
}
}
struct VLAPUIView_Previews: PreviewProvider {
static var previews: some View {
VLAPUIView()
}
}
上一篇: SwiftUI macos 教程之如何设置TextView行间距(教程含源码)
下一篇: iOS willMoveToParentViewController和didMoveToParentViewController使用
推荐阅读
-
【虚拟环境】4、基于virtualenv和virtualenvwrapper的虚拟环境使用
-
SwiftUI 2.0 LazyVGrid和LazyHGrid 深入使用教程含源码
-
SwiftUI NavigationView和List的使用
-
SwiftUI 如何使用其偏移量 offset 调整视图的位置?
-
SwiftUI 动画之 animatableData和VectorArithmeti高级使用
-
ScrollView中使用Delegate 滚动 UIKit的UIScrollView转化为在SwiftUI中使用
-
SwiftUI List中的TextField
-
Gef中MultiPageEditorPart中属性页和Outline的使用
-
Indri使用会遇到的坑和BUG
-
Rxjava实现10秒轮训和5秒轮训的交替使用