Мне так нравится
struct TestView: View {
@State static var title = "Some title text"
@State static var profileImage = "person.crop"
@State static var action : Int = 0
...
var body: some View {
NavigationView {
...
.navigationBarItems(leading: TitleLabel(title: TestView.$title), trailing: ProfileButton(imageName: TestView.$profileImage, action: TestView.$action))
.navigationBarTitle(Text(""), displayMode: .inline)
}
}
}
и
struct TitleLabel: View {
@Binding var title: String
var body: some View {
VStack {
Text(self.title)
.font(.title)
.foregroundColor(Color.blue)
.fontWeight(.bold)
}
.padding(EdgeInsets.init(top: 0, leading: 0, bottom: 0, trailing: 0))
}
}
struct ProfileButton: View {
@Binding var imageName: String
@Binding var action: Int
@State private var showModal = false
var body: some View {
VStack {
Button(action: {
}) {
Image(systemName: imageName)
.resizable()
.imageScale(.large)
.frame(width: 36, height: 36, alignment: .center)
.padding(EdgeInsets.init(top: 0, leading: 0, bottom: 5, trailing: -20))
.foregroundColor(Color.black)
}
}
.padding(.horizontal)
}
func doAction(action: Int) {
switch action {
case 0:
print("open profile")
default:
print("Unkown action")
}
}
}