Измените цвет индекса заголовка панели навигации с помощью цвета, установленного в активах

#swift #swiftui #uinavigationbar #navigationbar #uinavigationbarappearance

#swift #swiftui #uinavigationbar #панель навигации #появление панели навигации uinavigation

Вопрос:

Мне нужно изменить последние 5 букв заголовка панели навигации, чтобы они были одного цвета внутри моих ресурсов.

 struct MainView: View {
    var body: some View {
        NavigationView {
            Text("Hello, World!")
            
            .navigationBarTitle("HelloWorld")
        }
    }
    
    init() {
        // UIColor.red should be Color("orange1") and only for the last 5 letters (World)
        UINavigationBar.appearance().largeTitleTextAttributes = [.foregroundColor: UIColor.red]
        UINavigationBar.appearance().titleTextAttributes = [.foregroundColor: UIColor.red]
    }
}
  

Ответ №1:

Одним из способов, которым я это сделал, было добавить корневой вид в ZStack с выравниванием по верху и добавить пользовательский вид по центру после корневого вида. Затем я просто поместил тексты в HStack и получил префикс и суффикс нужного вам заголовка и изменил цвета на те, которые вы хотите. Для этого были разные способы, но я решил сделать это именно так для этого примера. Конечный результат выглядел примерно так.

 var navBarTitle: String = "HelloWorld"
var body: some View {
    ZStack(alignment: .top){
        //Root view with empty Title
        NavigationView {
            Text("Hello, World")
                .navigationBarTitle("",displayMode: .inline)
        }
        
        VStack{
            HStack{
                Text(navBarTitle.prefix(5))
                    .font(.largeTitle)
                    .foregroundColor(.red)
                Text(navBarTitle.suffix(5))
                    .font(.largeTitle)
                    .foregroundColor(.blue)
            }
        }
    }
    
}
  

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

Не уверен, что это именно то, что вы искали, но, надеюсь, это немного поможет!

Комментарии:

1. Это не решает мою проблему, но я надеюсь, что это может быть полезно для тех, кто работает только с встроенным displaymode. Для моего конкретного случая я искал простой способ изменить внешний вид панели навигации

Ответ №2:

Если вы хотите раскрасить последние пять букв строки в пользовательский цвет, вы могли бы использовать этот подход:

 string.addAttribute(NSAttributedString.Key.foregroundColor, value: Color("orange1"), range: NSMakeRange(string.length-5, 5))
  

Я не уверен, как вы можете использовать это с UINavigationBar.appearance().titleTextAttributes синтаксисом, но, возможно, это все равно вам поможет

Комментарии:

1. В этом проблема, в обычной строке я могу это сделать, но я не знаю, как это сделать в UINavigationBar