You can simply use HStack to separate the name text and its corresponding image.
import SwiftUI
struct ContentView: View {
var body: some View {
TabView{
FirstView()
.tabItem {
HStack {
Text("Save")
.fixedSize()
Image(systemName: "lock.fill")
}
}
SecondView()
.tabItem {
HStack {
Text("Things")
.fixedSize()
Image(systemName: "message.fill")
}
}
}
}
}
struct FirstView: View {
var body: some View {
Text("First")
}
}
struct SecondView: View {
var body: some View {
Text("Second")
}
}
Post
Replies
Boosts
Views
Activity
I don't have a definite answer, but I don't see why you cannnot. I have tried reading a SwiftUI file that comes with Swift Charts, using UIHostingController. That's been successful. So try that if you like.
I get a lot of hits by running a search for 'SwiftUI battery level.'
I've changed
class FrameModel: NSObject, NSCoding {
}
into
class FrameModel: NSObject, NSSecureCoding {
class var supportsSecureCoding: Bool { true }
}
Muchos thankos, eskimo.
It's not working because parent.color in Coordinator is not returned to UIColorPickerViewController. Use a Binding variable in Coordinator to pass the selected color back to UIColorPickerViewController. Besides, why do you use UIColorPickerViewController to access UIColorPickerViewController? SwiftUI has a guy named ColorPicker.
You aren't using the selectedValue variable in ContentView. So nobody knows how the selectedValue variable in MyPicker is supposed to affect ContentView. If the selectedValue variable in MyPicker is supposed to affect ContentView, then make it Binding.
I am able to use the contextMenu guy to navigate to another View. Do I miss something?
import SwiftUI
struct ContentView: View {
var body: some View {
NavigationStack {
FirstView()
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
struct FirstView: View {
@State var goToSecond = false
var body: some View {
VStack {
Text("FirstView")
.contextMenu {
Button("Go to Second View") {
goToSecond.toggle()
}
}
}
.navigationDestination(isPresented: $goToSecond) {
SecondView()
}
}
}
struct SecondView: View {
var body: some View {
VStack {
Text("SecondView")
}
}
}
What is screenCoord? Where does it come from?
You aren't really telling what you are trying to do. No screenshot? Why are you applying the height value you get from the gray rectangle to the other?
I think another approach is use of an ObservableObject class with
onReceive(_:perform:)
.
The following works.
Picker(selection: $selectedYear) {
ForEach(viewModel.years.indices, id: \.self) {
Text("\(viewModel.years[$0])")
}
} label: {
}
import SwiftUI
struct ProviderCalendarView: View {
@StateObject var viewModel = YearViewModel()
@State private var selectedYear = 3
var body: some View {
VStack {
HStack {
Picker(selection: $selectedYear) {
ForEach(viewModel.years, id: \.self) { year in
Text("\(year)")
}
} label: {
}
}
}
}
}
class YearViewModel: ObservableObject {
@Published var years: [Int] = []
init() {
createYears()
}
func createYears() {
let now = Date()
for i in 0..<4 {
years.append(2023 + i)
}
}
}
I don't use Range to create an array in this case. Yet, I still get the same compiler guy.
Silly me...
func fileWrapper(configuration: WriteConfiguration) throws -> FileWrapper {
let fileContent = try JSONEncoder().encode(self.document)
return FileWrapper(regularFileWithContents: fileContent)
}
Hmm... Maybe
let fileWrapper = FileWrapper(directoryWithFileWrappers: [filename: jsonFileWrapper])
is wrong?
I think I've fixed it.
import SwiftUI
struct ContentView: View {
@State var selectedTab = 0
@State var addTapped = false
@State var refresh = false
@State var people = [
Person(name: "Alice", systemImage: "person.circle.fill"),
Person(name: "Jane", systemImage: "person.circle.fill"),
Person(name: "Dave", systemImage: "person.circle.fill"),
Person(name: "Susan", systemImage: "person.circle.fill"),
Person(name: "Robert", systemImage: "person.circle.fill"),
Person(name: "Daniel", systemImage: "person.circle.fill")
]
var body: some View {
VStack(alignment: .leading, spacing: 0) {
ScrollView(.horizontal) {
HStack(spacing: 20) {
ForEach(0..<people.count, id: \.self) { num in
VStack {
...
}
.foregroundColor(selectedTab == num ? Color.blue : Color.gray)
.onTapGesture {
self.selectedTab = num
}
}
}
}.padding(.horizontal, 10)
Spacer()
.frame(height: 2)
Rectangle().fill(.gray)
.frame(height: 1)
TabView(selection: $selectedTab) {
ForEach(0..<people.count, id: \.self) { num in
let person = people[num]
Text(person.name)
.tag(person.id)
}
}
}
.tabViewStyle(.page(indexDisplayMode: .never)) // <<<<<<<<<<<<<<<<<<<<<
.onAppear {
UITabBar.appearance().isHidden = true
}
}
}