Установите цвет текста заполнителя для UISearchField в iOS 13

Я пытаюсь установить цвет текста заполнителя для UISearchField в iOS 13 (бета).

Мой код работал в iOS 12 и ранее. Я все еще могу изменить цвет фона UISearchField, цвет значка поиска и так далее ...

Вот что я пытаюсь:

searchTextField.attributedPlaceholder = NSAttributedString(
  string: "My placeholder text",
  attributes: [
    NSAttributedString.Key.foregroundColor: UIColor.red
  ]
);

Я ожидаю, что текст заполнителя теперь будет красным, но он останется серым.


person Matt    schedule 03.09.2019    source источник
comment
Кстати, код работает нормально. Кажется, ваша проблема в другом. вероятно, вы не называете этот код   -  person Dmitry    schedule 03.09.2019
comment
@dmitry: ни одно из предложений в этом потоке (почти все из которых идентичны приведенным выше) не работает в iOS 13. Код вызывается, и я использую минимальный пример. Если это работает для вас, возможно, вы не используете iOS 13.   -  person Matt    schedule 03.09.2019
comment
Возможно, вы правы. Я использовал iOS 12.2 для тестирования   -  person Dmitry    schedule 03.09.2019
comment
Что ж, как говорится в названии и самом посте, эта проблема касается только iOS 13.   -  person Matt    schedule 04.09.2019
comment
@Matt Есть новости по этому вопросу? Я тоже не нашел ответа, это срабатывает. Насколько сложно просто изменить цвет текста на placeHolder. Это из-за режима Dark / Light, я не хочу, чтобы система его игнорировала.   -  person Funnycuni    schedule 11.10.2019
comment
@Funnycuni Боюсь, я не нашел ответа. Нам пришлось изменить UX нашего приложения, чтобы он соответствовал цвету, который мы не можем изменить ...   -  person Matt    schedule 14.10.2019
comment
Проверьте это для Xcode11 и iOS 13: stackoverflow.com/a/58375484/7851805   -  person Nick    schedule 14.10.2019
comment
@Nick в этом ответе использует setValue (_, forKey :), который представляет собой частный API, использование которого может привести к запрету доступа в магазине приложений.   -  person Matt    schedule 21.10.2019


Ответы (1)


вы можете использовать NSMutableAttributeString, как показано ниже,

  let attrString = NSMutableAttributedString(string: "your placeHolder")

    attrString.addAttributes([NSAttributedString.Key.foregroundColor: UIColor.red, range: NSRange(location: 0, length: attrString.length))

searchTextField.attributedPlaceholder = attrString
person Hanryang    schedule 03.09.2019
comment
Для меня это не имеет значения. И следует ли нам этого ожидать? - изменчивость атрибутированной строки здесь не имеет значения. - person Matt; 03.09.2019