删除UISearchBar的顶部和底部边框和阴影?

时间:2015-10-15 11:05:27

标签: ios swift

我用UISearchBar创建了一个.xib。

我希望删除此图片中显示的顶部和底部边框:image

在顶部边框下方还有一个阴影。

我尝试过改变背景/色调等,但努力让它消失。

欢迎任何帮助,任何想法?

修改

所以下面的代码允许我摆脱顶部和底部的边框,但不是奇怪的投影。我添加了绿色背景以更清楚地显示它。

See

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

// **这就是我要做的事:https://stackoverflow.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() {

    }
}

9 个答案:

答案 0 :(得分:42)

将栏backgroundImage设为 UIImage nil

searchBar.backgroundImage = UIImage()

您也可以按照以下评论中的说明设置barTintColor

答案 1 :(得分:9)

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

在代码中:searchBar.searchBarStyle = .minimal

答案 2 :(得分:6)

我已经尝试了所有答案,但他们没有删除UISearchBar内部的UITextfield的1px内部阴影。

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

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

答案 3 :(得分:3)

试试这个:

System.Windows.Forms

修改

我认为阴影是由内部searchBar.layer.borderWidth = 1 searchBar.layer.borderColor = UIColor.whiteColor().CGColor 引起的。试试以下代码:

UITextField

答案 4 :(得分:1)

#方法1

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

  1. 在情节提要板上选择UISearch(假设:您已经将UISearch栏拖到了UIView / UIViewController中)

  2. 转到Attribute Inspector,您将看到Search Style

  3. Minimal下拉列表中选择Search Style

enter image description here enter image description here

就这样...

#方法2

否则如果您希望通过编程方式快速完成

  1. 在ViewController swift文件中为UISearch创建IBOutlet

  2. searchBar.searchBarStyle = .minimal

在这里放置searchBar而不是your UISearch outlet's name

答案 5 :(得分:0)

还有另一招:

对于底部边框,您可以通过俯仰视图(例如:tableView)按-1像素覆盖它。

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

答案 6 :(得分:0)

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

  1. 列表项

    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)
}

答案 7 :(得分:0)

警卫让searchTextField = searchBar.value(forKey:“ searchField”)为? UITextField else {return} searchTextField.borderStyle = .none

如果要完全删除边框 斯威夫特5

答案 8 :(得分:0)

如果其他建议的选项对您不起作用,请尝试将searchTextField属性用于最低部署目标iOS 13。

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