ios - SwiftUI WidgetKit:如何将视图锚定到顶部
问题描述
我正在尝试使用 SwiftUI 和 WidgetKit 布局 tableView,并希望获得与 Apple 的 Notes 小部件类似的结果。
我当前的实现成功地在小部件中布置视图.systemLarge
,但不是在.systemMedium
小部件中。我想将视图固定到小部件的顶部,这样“FAVOURITES”的标题在.systemMedium
.
struct PlacesWidgetEntryView : View {
var entry: Provider.Entry
let places = [
Place(name: "Place 1", imageName: "baseline_star_black_24pt"),
Place(name: "Place 2", imageName: "baseline_star_black_24pt"),
Place(name: "Place 3", imageName: "baseline_star_black_24pt"),
Place(name: "Place 4", imageName: "baseline_star_black_24pt"),
Place(name: "Place 5", imageName: "baseline_star_black_24pt"),
]
var body: some View {
VStack {
//Header
HStack {
Text("FAVOURITES")
.bold()
.frame(height: 8)
Spacer()
}
.padding()
.background(Color.blue)
//TableView
LazyVStack {
ForEach(places, id: \.self) { place in
PlaceRow(place: place)
}
}
Spacer()
}
}
}
struct PlaceRow: View {
let place: Place
var body: some View {
HStack {
Text(place.name)
.font(.body)
Spacer()
Image(place.imageName)
.resizable()
.frame(width: 28, height: 28, alignment: .center)
}
.padding(.horizontal)
.padding(.vertical, 4)
}
}
实施成果:
以上是.systemLarge
,这很好,并且符合我的期望。
以上是.systemMedium
,这不是我所期望的。我希望看到“收藏夹”锚定在 widgetView 的顶部,并且 tableView 可能会溢出到底部。
解决方案
这是可能的布局解决方案。使用 Xcode 12 测试。
var body: some View {
VStack(spacing: 0) {
HStack {
Text("FAVOURITES")
.bold()
.frame(height: 8)
Spacer()
}
.padding()
.background(Color.blue)
Color.clear
.overlay(
LazyVStack {
ForEach(places, id: \.self) { place in
PlaceRow(place: place)
}
},
alignment: .top)
}
.frame(maxWidth: .infinity, maxHeight: .infinity)
}
推荐阅读
- javascript - 如何在 JavaScript 中同步运行函数?
- c++ - 如何在 Visual Studio 2019 中有条件地编译 c++ 源文件?
- c - 凯撒密码 - 有条件的跳跃或移动取决于未初始化的值
- haskell - 如何在 Liquid Haskell 中编写 log2 函数
- elasticsearch - Elasticsearch 中 _search 上“preference”和“search_type”的结果差异
- nginx - 如何让两个虚拟主机在同一台服务器上工作以集成 Onlyoffice - DocumentServer
- c - 分配给具有数组类型的表达式并请求非结构或联合中的成员
- javascript - 我如何制作一个代码,当输入是您的 TikTok 关注者列表时,列出所有超过 ex 的关注者列表。一万粉丝?
- excel - Excel 2016/2013 崩溃运行 SaveAs 方法 2 次
- python - 使用替换令牌的 NLP