SwiftUI: постоянная ошибка диагностики при создании панели навигации

Я новичок в SwiftUI, и я пытаюсь создать эту панель навигации с помощью Xcode 12.4:

введите описание изображения здесь

Вот моя точка зрения:

struct PreferencesView: View {
  var body: some View {
    NavigationView {
      ZStack {
        //Background Color
        Color("DosDark")
          .edgesIgnoringSafeArea(.all)
        Text("Hey.")
        //Nav bar styles
        .navigationBarTitleDisplayMode(.inline)
        .toolbar {
            ToolbarItem(placement: .principal) {
                VStack {
                    Text("Preferences")
                    .navBarTitleDark()
                }
            }
        }
        .navigationBarItems(
          leading: NavClose(), //<-- This is where the trouble starts
          trailing: NavAbout()
        ) 
      }
    }
  }
}

struct NavClose: View {
  var body: some View { //<-- Inexplicable error here
    Button(action: {
      print("Close...")
    }){
      Image("close-blue")
    }
  }
}

struct NavAbout: View {
  var body: some View {
    Button(action: {
      print("Show about stuff...")
    }) {
      Image("about-blue")
    }
  }
}

Я могу заставить заголовок нормально отображаться, но как только я добавляю бит .navigationBarItems, я постоянно вижу ошибку на моем struct, которую я пытаюсь вытащить:

введите описание изображения здесь

Когда я пытаюсь поместить Button прямо в .navigationBarItems (без использования внешнего struct), я все еще вижу ошибку в этой строке:

Не удалось произвести диагностику для выражения; пожалуйста, отправьте отчет об ошибке

Я делаю что-то неправильно? Есть ли способ заставить Xcode выдавать мне настоящее сообщение об ошибке?

См. также:  Родительский вид не обновляется после закрытия дочернего представления
Понравилась статья? Поделиться с друзьями:
IT Шеф
Комментарии: 1
  1. Clifton Labrum

    Прекрасно работает с Xcode 12.1 / iOS 14.1, но .navigationBarItems устарел из-за предпочтения toolbar, и, вероятно, у вас есть более новая версия, в которой они уже находятся в конфликте.

    Решение состоит в том, чтобы использовать только панель инструментов с соответствующими местами размещения, например

        .toolbar {
            ToolbarItem(placement: .navigationBarLeading) {
                    NavClose()
                }
            ToolbarItem(placement: .navigationBarTrailing) {
                    NavAbout()
                }
            ToolbarItem(placement: .principal) {
                VStack {
                    Text("Preferences")
                    .navBarTitleDark()
                }
            }
        }
    

    Большое спасибо за вашу помощь! Я не знал, что .navigationBarItems устарел (и скатертью дорога). ???? Похоже, что корень проблемы — Button(). Если я заменю его просто Image("close-blue"), он заработает. В синтаксисе закрытия Button есть что-то, что ему не нравится. ???? person Clifton Labrum; 28.01.2021

    Ах, я нашел проблему. У меня был typealias с именем Button, и Xcode подавился им. Ооо! ????????‍♂️ Еще раз спасибо за вашу помощь! person Clifton Labrum; 28.01.2021

Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: