оставлены в качестве упражнения для читателя.

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

self.navigationController?.navigationBar.titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white]

Я что-то пропустил? Код выше неправильный?

 Jake18 сент. 2017 г., 01:30
Свифт 4titleTextAttributes имеет тип[NSAttributedStringKey: Any]?. NSForegroundColorAttributeName является строкой, поэтому этот путь не будет построен.
 Joe18 сент. 2017 г., 00:17
пытатьсяnavigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.white]

Ответы на вопрос(2)

когда я установил barStyle на черный. Я установил другие атрибуты цвета (например, желаемый цвет фона), используя внешний вид прокси:

myNavbar.barStyle = UIBarStyleBlack; // Objective-C
myNavbar.barStyle = .black // Swift
Решение Вопроса

UIAppearance стилизовать текст подсказки на iOS 11.

Я подал радар # 34758558, чтоtitleTextAttributes свойство просто перестало работать для приглашения в iOS 11.

Хорошей новостью является то, что есть несколько обходных путей, которые мы можем найти с помощью отладчика иерархии представлений Xcode:

// 1. This works, but potentially changes *all* labels in the navigation bar. 
// If you want this, it works.
UILabel.appearance(whenContainedInInstancesOf: [UINavigationBar.self]).textColor = UIColor.white

Подсказка - это просто UILabel. Если мы используем UIAppearance'swhenContainedInInstancesOf:Мы можем довольно легко обновить цвет так, как мы хотим.

Если вы присмотритесь, вы заметите, что на UILabel также есть вид оболочки. У него есть свой собственный класс, который может отвечать на UIAppearance ...

// 2. This is a more precise workaround but it requires using a private class.

if let promptClass = NSClassFromString("_UINavigationBarModernPromptView") as? UIAppearanceContainer.Type
{
  UILabel.appearance(whenContainedInInstancesOf: [promptClass]).textColor = UIColor.white
}

Я бы посоветовал придерживаться более общего решения, поскольку оно не использует закрытый API. (Обзор приложения и т. Д.) Проверьте, что вы получаете с любым из этих двух решений:

 Moshe20 нояб. 2018 г., 04:23
@fivewood Какая часть не работает? Часть 1 или часть 2?
 fivewood19 нояб. 2018 г., 02:53
Это не работает для меня
 fivewood20 нояб. 2018 г., 04:35
iOS 12.1.1 beta 3
 Moshe20 нояб. 2018 г., 04:33
Какая версия iOS? Этот ответ для iOS 11. Мне любопытно, изменился ли закрытый API (SPI) или внутреннее имя класса в iOS 12. Это первое место, которое я здесь посмотрю.
 fivewood20 нояб. 2018 г., 04:25
Условие имеет значение true, и тело оператора if кажется выполненным, но в моем тексте подсказки нет никаких изменений.

Ваш ответ на вопрос