Search code examples
iosswiftuitvos

is there a better way to exclude navigationBarTitle for tvOS?


... to reuse a view with a navigationBarTitle? Or do I really have to repeat everything...just without navigationBarTitle for tvos ?

 #if os(iOS)

    NavigationLink(destination: CountryDetails(countryInfo: self.$userData.countryInfos[countryInfosIndex(of: country.name)])
                                .environmentObject(self.userData)
                                .navigationBarTitle(Text(country.name), displayMode: .inline) // <<<<<<<< the only difference
                        ) {
                            EmptyView() 
                        }.frame(width: 1, height: 1) 
 #else
    NavigationLink(destination: CountryDetails(countryInfo: self.$userData.countryInfos[countryInfosIndex(of: country.name)])
                                .environmentObject(self.userData)
                        ) {
                            // CountryRow(country: country)
                            EmptyView() 
                        }.frame(width: 1, height: 1) 
 #endif

Solution

  • Try this approach

    extension View {
        public func iosnavigationBarTitle(_ title: Text, 
                 displayMode: NavigationBarItem.TitleDisplayMode = .inline) -> some View {
    #if os(iOS)
            return self.navigationBarTitle(title, displayMode: displayMode)
    #else
            return self
    #endif
        }
    }