移除 UISearchBar 的上下边框和阴影?

Posted

技术标签:

【中文标题】移除 UISearchBar 的上下边框和阴影?【英文标题】:Remove top and bottom border of UISearchBar and shadow? 【发布时间】:2015-10-15 11:05:26 【问题描述】:

我创建了一个带有 UISearchBar 的 .xib。

我希望删除此图像中的顶部和底部边框:

在顶部边框下方还有一个看起来像阴影的东西。

我尝试过更改背景/色调等,但很难让它消失。

欢迎任何帮助,有什么想法吗?

编辑

所以下面的代码可以让我摆脱顶部和底部的边框,但不能摆脱奇怪的阴影。我添加了绿色背景以更清晰地显示它。

另外,在文本框(而不是视图)周围添加边框的最佳方法是什么?谢谢

//** 这就是我想要做的:https://***.com/questions/33107058/uiviewcontroller-sizing-as-maincontroller-within-uisplitviewcontroller

这是我正在使用的代码。

import UIKit

class TopSearchViewController: UIView 

    var expanded: Int = 0

    @IBOutlet weak var trailingConstraint: NSLayoutConstraint!
    @IBOutlet var contentView: UIView!
    @IBOutlet weak var searchBar: UISearchBar!

    @IBAction func advancedSearchButton(sender: AnyObject) 
        if expanded == 0 
            self.layoutIfNeeded()
            UIView.animateWithDuration(0.1, animations: 
                self.trailingConstraint.constant = 200
                self.layoutIfNeeded()
            )
            expanded = 1
         else 
            self.layoutIfNeeded()
            UIView.animateWithDuration(0.1, animations: 
                self.trailingConstraint.constant = 25
                self.layoutIfNeeded()
            )
            expanded = 0
        
    

    override init(frame: CGRect)  // for using CustomView in code
        super.init(frame: frame)
        self.commonInit()
    

    required init(coder aDecoder: NSCoder)  // for using CustomView in IB
        super.init(coder: aDecoder)
        self.commonInit()
    

    private func commonInit() 
        NSBundle.mainBundle().loadNibNamed("TopSearchViewController", owner: self, options: nil)

        contentView.frame = self.bounds
        contentView.autoresizingMask = .FlexibleHeight | .FlexibleWidth

        self.addSubview(contentView)

        self.searchBar.layer.borderWidth = 1
        self.searchBar.layer.borderColor = UIColor.whiteColor().CGColor

        println(searchBar)

        for subview in searchBar.subviews 
            println("hello")

            var textField : UITextField

            if (subview.isKindOfClass(UITextField)) 
                textField = subview as! UITextField
                textField.borderStyle = .None
                textField.layer.borderWidth = 1
                textField.layer.borderColor = UIColor.lightGrayColor().CGColor
                textField.layer.cornerRadius = 14
                textField.background = nil;
                textField.backgroundColor = UIColor.whiteColor()
            
        

    

    func viewDidLoad() 

    

【问题讨论】:

【参考方案1】:

将栏的backgroundImage 设置为 UIImage不是 nil

searchBar.backgroundImage = UIImage()

您也可以设置barTintColor,正如您在下面的评论中指定的那样。

【讨论】:

精湛 :) 好主意 :) tq 这对我不起作用,因为在将 backgroundImage 设置为空 UIImage 后 barTintColor 不会占用 @GregHilston,但这不是 OP 的问题。如果您想要一个稍微半透明的彩色条,那么您需要将backgroundImage 设置为您以编程方式创建并设置为所需颜色的非空UIImage。 (您不能在 Interface Builder 中设置图像的颜色。) @NRitHOh 伙计,我完全误读了 OP 的问题。感谢您的后续评论! 这仍然适用于 ios 13,并且似乎是我能找到的唯一可靠工作的东西。另一种将视图重叠 1px 的方法更有可能因布局更改或这些元素的大小随 iOS 版本更改而发生更改而中断。谢谢!【参考方案2】:

使用 Xcode 11,您可以在 Storyboard 中将“搜索样式”设置为“最小”。

在代码中:searchBar.searchBarStyle = .minimal

【讨论】:

帮助移除了上下边框。谢谢! 这为我删除了出现在搜索栏和选定范围按钮附件视图之间的边框,当视图以较大的可访问性类型大小显示时,他在此处回答的另一种方法并未隐藏.所以谢谢!【参考方案3】:

所有的答案我都试过了,都没有去掉UISearchBar的UITextfield里面1px的内阴影。

我通过增加白色边框的宽度解决了这个问题。 它与阴影重叠。

searchBar.layer.borderWidth = 10
searchBar.layer.borderColor = UIColor.white.cgColor

【讨论】:

【参考方案4】:

试试这个:

searchBar.layer.borderWidth = 1
searchBar.layer.borderColor = UIColor.whiteColor().CGColor

编辑:

我相信阴影是由内部UITextField引起的。试试下面的代码:

var textField : UITextField

for subview in searchBar.subviews 
    if (subview.isKindOfClass(UITextField)) 
        textField = subview as! UITextField
        textField.borderStyle = .None
        textField.layer.borderWidth = 1
        textField.layer.borderColor = UIColor.lightGrayColor().CGColor
        textField.layer.cornerRadius = 14
        textField.background = nil;
        textField.backgroundColor = UIColor.whiteColor()
    

【讨论】:

所以我确实在 viewDidLoad 中尝试过,但是在将它放在其他地方之后,它现在可以工作了。然而,这只去掉了上面和下面的线,而不是奇怪的色调。 (我知道它与色调有关,因为如果我将其更改为白色,它就会消失) 请看我编辑的帖子。我想我回答了你原来的问题,这应该是公认的答案。 这似乎对我不起作用。请查看我的更新代码。【参考方案5】:

#方法一

感谢@andrewlundy,Storyboard 方法是这样的。 (Xcode 11.*)

    在 storyboard 中选择 UISearch(假设:你已经将一个 UISearch Bar 拖到你的 UIView/UIViewController)

    转到Attribute Inspector,你会看到Search Style

    Search Style 下拉列表中选择Minimal

就是这样……

#方法二

否则如果您想以编程方式执行此操作,请快速

    在你的 ViewController swift 文件中为 UISearch 创建一个IBOutlet

    searchBar.searchBarStyle = .minimal

这里不是searchBar,而是your UISearch outlet's name

【讨论】:

【参考方案6】:

还有一个技巧:

对于底部边框,您可以通过-1像素的波纹视图(例如:tableView)将其覆盖。

对于顶部边框,将其向上移动 1 个像素到导航栏下方也可以解决此问题。

【讨论】:

【参考方案7】:

我在swift5中使用了以下代码来实现搜索栏

    列表项

    let searchbar:  UISearchBar =
     
    let sear = UISearchBar()
    sear.tintColor = Mycolor().lightgray1
    sear.backgroundColor = Mycolor().lightgray1
    sear.barTintColor =  Mycolor().lightgray1
    sear.placeholder = "Search Asset"
    sear.layer.cornerRadius = 30
    sear.barStyle = .default
    sear.backgroundImage = UIImage()
   // sear.addShadow(offset: CGSize(width: 10, height: 10), color: UIColor.darkGray, radius: 20, opacity: 5)

    return sear

()

  override func viewDidLoad() 
    super.viewDidLoad()

    self.view.addSubview(searchbar)



override func viewLayoutMarginsDidChange() 
    self.searchbar.frame = CGRect(x: 10, y: 20, width: self.view.frame.width - 20, height: 50)

【讨论】:

【参考方案8】:

guard let searchTextField = searchBar.value(forKey: "searchField") as? UITextField 其他 返回 searchTextField.borderStyle = .none

如果你想完全移除边框 斯威夫特 5

【讨论】:

【参考方案9】:

尝试searchTextField 属性以获得最低部署目标 iOS 13,以防其他建议的选项不适合您。

if #available(iOS 13.0, *) 
            searchBar.searchTextField.backgroundColor = UIColor.clear
            searchBar.searchTextField.borderStyle = .none
        

【讨论】:

以上是关于移除 UISearchBar 的上下边框和阴影?的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS7 中移除 UISearchBar 的边框

从图例元素中删除字段集边框和框阴影

word边框+底纹

如何在圆形imageView android上添加阴影和边框?

自定义UISearchBar外观

UISearchBar 黑线/边框