I have the following View
in SwiftUI to display FamilyActivityPicker
:
import SwiftUI
import FamilyControls
struct FamilyActivityPickerView: View {
@State private var selectionToDiscourage = FamilyActivitySelection()
@Environment(\.dismiss) private var dismiss
var body: some View {
FamilyActivityPicker(headerText: "Select Apps to Restrict", selection: $selectionToDiscourage).navigationBarItems(leading: Button("Cancel") {
print("Cancel!")
dismiss()
}, trailing: Button("Done") {
print("Done!")
dismiss()
}).ignoresSafeArea().onChange(of: selectionToDiscourage) { newSelection in
let applications = selectionToDiscourage.applications
let categories = selectionToDiscourage.categories
let webDomains = selectionToDiscourage.webDomains
print("applications: \(applications), categories: \(categories), webDomains: \(webDomains)")
}
}
}
However, neither of the navigationBarItems leading and trailing buttons are showing:
What am I doing wrong? How are we supposed to Cancel or Done the FamilyActivityPicker view?
EDIT:
When I use NavigationStack
with .toolbar
, I end up with 2 navigation bars as shown below screenshot which looks very ugly and wastes space:
import SwiftUI
import FamilyControls
struct FamilyActivityPickerView: View {
@State private var selectionToDiscourage = FamilyActivitySelection()
@Environment(\.dismiss) private var dismiss
var body: some View {
NavigationStack {
FamilyActivityPicker(selection: $selectionToDiscourage).ignoresSafeArea().onChange(of: selectionToDiscourage) { newSelection in
let applications = selectionToDiscourage.applications
let categories = selectionToDiscourage.categories
let webDomains = selectionToDiscourage.webDomains
print("applications: \(applications), categories: \(categories), webDomains: \(webDomains)")
}.toolbar {
ToolbarItem(placement: .navigationBarLeading) {
Button("Cancel") {
print("Cancel!")
dismiss()
}
}
ToolbarItem(placement: .navigationBarTrailing) {
Button("Done") {
print("Done!")
dismiss()
}
}
}
}
}
}
Result:
What you are looking for is `familyActivityPicker` not `FamilyActivityPicker`
import SwiftUI
import FamilyControls
struct FamilyParentView: View {
@State var selection = FamilyActivitySelection()
@State var isPresented = false
var body: some View {
Button("Present FamilyActivityPicker") { isPresented = true }
.familyActivityPicker(isPresented: $isPresented,
selection: $selection)
.onChange(of: selection) { _, newSelection in
let applications = selection.applications
let categories = selection.categories
let webDomains = selection.webDomains
}
}
}