У меня есть панель поиска, к которой я применил тень, и, как вы можете видеть, здесь, кнопка отмены тоже отбрасывает свою тень. Я бы хотел, чтобы тень ограничивалась текстовым полем поиска. Вот с чего я начинаю:
let searchBar = UISearchBar()
searchBar.placeholder = "KAT Milkshake"
searchBar.backgroundImage = UIImage()
searchBar.barTintColor = UIColor.white
searchBar.compatibleSearchTextField.leftView?.tintColor = UIColor.gray
searchBar.compatibleSearchTextField.backgroundColor = UIColor.white
searchBar.layer.shadowColor = UIColor.black.cgColor
searchBar.layer.shadowOpacity = 0.25
searchBar.layer.shadowOffset = CGSize(width: 2, height: 2)
searchBar.layer.shadowRadius = 5
Что я пробовал:
-
Я попытался изменить внешний вид кнопки отмены с помощью
UIBarButtonItem.appearance(whenContainedInInstancesOf: [UISearchBar.self])
, но оказалось, что тень этого объекта — отдельная. Обратите внимание на тонкую разницу вокруг букв после того, как я применил другую тень, изменив свойства тени внешнего вида . -
Назначение кнопке белого фона изображения не сработало, что я и сделал, открыв
searchBar.value(forKey: "cancelButton") as! UIButton
. Тень применяется вокруг всего изображения и выглядит еще хуже. -
К сожалению, не удалось настроить границы слоя панели поиска (
searchBar.layer.frame = CGRect(x: searchBar.frame.minX, y: searchBar.frame.minY, width: searchBar.frame.width - cancelButton.frame.width, height: searchBar.frame.height)
). Я выделил слой панели поиска для наблюдения за этим, и тень кнопки отмены сохраняется . -
Я также попытался отсоединить кнопку отмены от супервизора, но смог только заставить ее полностью исчезнуть.
Есть ли способ обойти это? Я использую Swift 5 и iOS 14.
Вы можете найти UITextField в UISearchBar и настроить его. Вы можете искать расширения для доступа к textField из searchBar. — person srna schedule 18.11.2020
@ibrahimyilmaz Вау, спасибо! Я чувствую себя глупо из-за того, что не думаю об этом. Это почти работает — вызывает некрасивое обрезание верхних и нижних теней. Я отправлю ответ, если выясню, как это исправить, не уменьшая радиус тени. — person srna schedule 18.11.2020
Как предложил Ибрахимьилмаз, добавление тени в UITextField вместо UISearchBar сделало свою работу. Просто пришлось изменить мои ограничения высоты и привязки макета, чтобы справиться с обрезкой.
Я выполнил этот пример пользователя Joshpy, чтобы получить доступ к текстовому полю. Для iOS ›= 13 создать тень очень просто: