我正在学习 SwiftUI,但我遇到了一个问题......ScrollView当SegmentedControl值改变时我如何滚动到顶部?
这是主视图显示数据的代码:
var body: some View {
NavigationView {
SegmentedControl(selection: $selected) {
Text("Food").tag(0)
Text("Drinks").tag(1)
Text("Wines").tag(2)
}
.padding()
ScrollView {
VStack(alignment: .center) {
if selected == 0 {
ForEach (persons) {
AnyCell(person: $0, animal: nil, wine: nil)
}
} else if selected == 1 {
ForEach (animals) {
AnyCell(person: nil, animal: $0, wine: nil)
}
} else {
ForEach (wines) {
AnyCell(person: nil, animal: nil, wine: $0)
}
}
}
}
.navigationBarTitle(Text("Food list"), displayMode: .inline)
} …Run Code Online (Sandbox Code Playgroud) 我尝试消除约束。我想对纵向和横向有不同的限制。如果我将方向更改为纵向,我会调用函数setupConstrainsInPortrait,反之亦然。我有两个功能。
此功能设置人像模式。
func setupConstrainsInPortrait() {
view.addSubview(myView)
myView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
myView.topAnchor.constraint(equalTo: view.topAnchor, constant: 50).isActive = true
myView.heightAnchor.constraint(equalToConstant: 300).isActive = true
myView.widthAnchor.constraint(equalToConstant: view.frame.size.width).isActive = true
view.addSubview(switchKmM)
switchKmM.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
switchKmM.topAnchor.constraint(equalTo: myView.bottomAnchor, constant: 10).isActive = true
switchKmM.heightAnchor.constraint(equalToConstant: 50).isActive = true
switchKmM.widthAnchor.constraint(equalTo: view.widthAnchor).isActive = true
view.addSubview(speedLbl)
speedLbl.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
speedLbl.topAnchor.constraint(equalTo: view.bottomAnchor, constant: -50).isActive = true
speedLbl.heightAnchor.constraint(equalToConstant: 50).isActive = true
speedLbl.widthAnchor.constraint(equalTo: view.widthAnchor).isActive = true
}
Run Code Online (Sandbox Code Playgroud)
此功能设置横向模式。
func setupConstrainsInLandScape() {
view.addSubview(myView)
myView.leftAnchor.constraint(equalTo: view.leftAnchor, constant: 10).isActive = true
myView.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true …Run Code Online (Sandbox Code Playgroud)