【问题标题】:Swift - How to give shadow to UISearchBar but *not* its cancel button?Swift - 如何给 UISearchBar 提供阴影,但*不是*它的取消按钮?
【发布时间】:2020-11-18 05:57:38
【问题描述】:

我有一个已应用投影的搜索栏,如您所见here,取消按钮也投下自己的阴影。我希望阴影仅限于搜索文本框。这是我要开始的内容:

    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

我尝试过的:

  1. 我尝试通过UIBarButtonItem.appearance(whenContainedInInstancesOf: [UISearchBar.self]) 更改取消按钮的外观,但事实证明该对象的阴影是单独的。在我通过修改外观阴影属性应用另一个阴影之后,请注意微妙的difference around the letters

  2. 给按钮一个白色图像背景不起作用,我通过访问searchBar.value(forKey: "cancelButton") as! UIButton 做到了。阴影应用around the whole image,看起来更糟。

  3. 不幸的是,调整搜索栏层的边界也不起作用( searchBar.layer.frame = CGRect(x: searchBar.frame.minX, y: searchBar.frame.minY, width: searchBar.frame.width - cancelButton.frame.width, height: searchBar.frame.height))。 我给了搜索栏层一个边框来观察这个,取消按钮阴影 persists.

  4. 我也尝试从超级视图取消链接取消按钮,但只能让它完全消失。

有没有办法解决这个问题?我正在使用 Swift 5 和 iOS 14。

【问题讨论】:

  • 你可以找到 UISearchBar 的 UITextField 并自定义它。您可以搜索有关从 searchBar 访问 textField 的扩展。
  • @ibrahimyilmaz 哇,谢谢!我觉得很傻,没有想到这一点。它几乎可以工作 - 导致顶部和底部阴影出现一些难看的剪裁。如果我知道如何在不减小阴影半径的情况下修复它,我会发布答案。

标签: ios swift uikit uisearchbar


【解决方案1】:

正如 ibrahimyilmaz 建议的那样,将阴影添加到 UITextField 而不是 UISearchBar 可以完成工作。只需要修改我的高度和布局锚约束来处理剪辑。

我关注用户 Joshpy 的 this example 以访问文本字段。对于 iOS >= 13,制作阴影很简单:

    searchBar.searchTextField.layer.shadowColor = UIColor.black.cgColor
    searchBar.searchTextField.layer.shadowOpacity = 0.25
    searchBar.searchTextField.layer.shadowOffset = CGSize(width: 2, height: 2)
    searchBar.searchTextField.layer.shadowRadius = 5

【讨论】:

    猜你喜欢
    • 2013-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-18
    • 1970-01-01
    相关资源
    最近更新 更多