提问人:J. Edgell 提问时间:6/7/2019 最后编辑:brunoJ. Edgell 更新时间:5/20/2021 访问量:9198
在 SwiftUI 中,如何将选项卡放在视图顶部的 TabbedView 中?
In SwiftUI how do I put the tabs in a TabbedView at the top of the view?
问:
我有一个底部有选项卡的视图,其中一个有,为了直观地分离逻辑,我用以下代码将子视图的选项卡放在视图的顶部,它工作得很好:views
subviews
self.tabbar.frame = CGRect( x: 0,
y: view.safeAreaInsets.top,
width: self.view.frame.size.width,
height: 50)
我该怎么做?SwiftUI
答:
15赞
Fogmeister
6/12/2019
#1
为此,您可以将选项卡视图创建为各个选项卡的容器,如下所示...
struct TabbedView: View {
@State private var selectedTab: Int = 0
var body: some View {
VStack {
Picker("", selection: $selectedTab) {
Text("First").tag(0)
Text("Second").tag(1)
Text("Third").tag(2)
}
.pickerStyle(SegmentedPickerStyle())
switch(selectedTab) {
case 0: FirstTabView()
case 1: SecondTabView()
case 2: ThirdTabView()
}
}
}
}
这样做时,您将根据分段控件的值有条件地填充“选项卡页”。
通过使用 和 分段控件将更新 selectedTab 值,然后重新呈现视图,该视图将基于 的新值 替换页面。@State
$selectedTab
selectedTab
编辑
开关现在可以在 SwiftUI 测试版中使用。👍🏻
评论
2赞
Steve Riggins
6/14/2019
不幸的是,至少在 b1 中,我们不能在 ViewBuilders 中使用 switch。Closure containing control flow statement cannot be used with function builder 'ViewBuilder'
0赞
Fogmeister
6/14/2019
@SteveRiggins谢谢,这很痛苦。不过现在更新了我的答案。谢谢
0赞
Matteo Pacini
6/14/2019
块内的控制流语句不是“常规的”——它们由编译器通过结构体进行转换,从而启用强大的 SwiftUI DSL。 不起作用,因为它不是函数构建器提案的一部分。@ViewBuilder
@_functionBuilder
switch
2赞
Nico Cobelo
2/12/2021
@Fogmeister,你从哪里得到SegmentedControl?
0赞
kwiknik
2/17/2023
@NicoCobelo 也许来自 UISegmentedControl。“由多个段组成的水平控件,每个段都充当离散按钮。”
评论