我有一个带有输入字段的基本窗口(第1页),在它的顶部出现一个弹出窗口(第2页),其中还有一个输入字段和按钮,单击时会弹出一个小窗口带有输入字段(第 3 页)。如果键盘上没有显示“Done”,则界面功能正常。如果添加一个“完成”按钮,结果是,当从第 2 页移动到第 3 页时,它的颜色从系统颜色蓝色变为灰色。实验并想知道为什么会这样,我发现第 1 页上的工具栏负责第 3 页上按钮的颜色...如果您更改第 1 页工具栏上按钮的颜色 - 它将在第 3 页工具栏上更改,第 2 页不会受到影响。此外,添加按钮会导致错误:“[LayoutConstraints] 无法同时满足约束。” 我想知道为什么在第 1 页上设置了键盘上的按钮,而在第 3 页上打字时也得到了一个按钮?为什么它变灰并且不起作用?为什么如果我更改第 1 页上的按钮的颜色,第 3 页上的灰色按钮的颜色也会更改吗?
一个具有代表性的小样本:
内容视图
import SwiftUI
struct ContentView: View {
@State private var bloodClucoseLvl: String = ""
@State private var isSheetShown: Bool = false
@FocusState private var focusField: Bool
var body: some View {
NavigationView {
List {
Section("Add your current blood glucose lvl") {
TextField("5,0 mmol/l", text: $bloodClucoseLvl)
.focused($focusField)
}
Section("Add food or drink") {
Button(action:{
isSheetShown.toggle()
}, label:{
HStack{
Text("Add")
Image(systemName: "folder.badge.plus")
}
})
.sheet(isPresented: $isSheetShown) {
addFoodButton()
}
}
}
.navigationTitle("Page 1 - General")
.toolbar{
ToolbarItem(placement: .keyboard) {
HStack {
Spacer()
Button(action: {
focusField = false
}) {
Text("Done")
}
}
}
}
.ignoresSafeArea(.keyboard)
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
Run Code Online (Sandbox Code Playgroud)
添加食物按钮
import SwiftUI
struct addFoodButton: View {
@State private var selectedFood: String = ""
@State public var addScreen: Bool = false
var body: some View {
ZStack {
NavigationView {
List {
Section("or choose from category"){
NavigationLink(destination: Alcohol(addScreen: $addScreen)){
Text("Alcohol")
}
}
}
.listStyle(.insetGrouped)
.searchable(text: $selectedFood, prompt: "Search by word")
.navigationTitle("Page 2 - Search in DB")
}
if addScreen{
addScreenView(addScreen: $addScreen)
}
}
}
}
struct Alcohol: View {
@State private var searchInsideCategory: String = ""
@Binding var addScreen: Bool
var body: some View {
List {
Button(action: {addScreen.toggle()}){
Text("Light beer")
}
}
.navigationTitle("Page 2 - Choose beer")
.searchable(text: $searchInsideCategory, prompt: "Search inside a category")
}
}
struct addFoodButton_Previews: PreviewProvider {
static var previews: some View {
addFoodButton()
}
}
Run Code Online (Sandbox Code Playgroud)
添加屏幕视图
import SwiftUI
struct addScreenView: View {
@Binding var addScreen: Bool
@State private var gram: String = ""
var body: some View {
ZStack{
Color.black.opacity(0.2).ignoresSafeArea()
VStack(spacing:0){
Text("Page 3 - Add an item")
.bold()
.padding()
Divider()
VStack(){
TextField("gram", text: $gram)
.padding(.leading, 16)
.padding(.trailing, 16)
.keyboardType(.numberPad)
Rectangle()
.frame(height: 1)
.padding(.leading, 16)
.padding(.trailing, 16)
}.padding()
Divider()
HStack(){
Button(action: {
addScreen.toggle()
}){
Text("Cancel").frame(minWidth:0 , maxWidth: .infinity)
}
Divider()
Button(action: {
addScreen.toggle()
}){
Text("Save").frame(minWidth:0 , maxWidth: .infinity)
}
}.frame(height: 50)
}
.background(Color.white.cornerRadius(10))
.padding([.leading, .trailing], 15)
}
}
}
struct addScreenView_Previews: PreviewProvider {
static var previews: some View {
addScreenView(addScreen: .constant(true))
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
207 次 |
| 最近记录: |