Удалить верхнюю и нижнюю границу UISearchBar и тени?

Я создал.xib с UISearchBar.

Я хочу удалить верхнюю и нижнюю границы, как показано на этом изображении: image

Существует также то, что выглядит как тень под верхней границей.

Я попытался изменить фон/цвет оттенков и т.д., Но изо всех сил пытался заставить его исчезнуть.

Любая помощь будет приветствоваться, любые идеи?

РЕДАКТИРОВАТЬ

Поэтому приведенный ниже код позволяет мне избавиться от границы сверху и снизу, но не странную тень. Я добавил зеленый фон, чтобы показать его более четко.

See

Кроме того, что было бы лучшим способом добавить границу вокруг текстового поля (а не представления)? Спасибо

//** Это то, что я пытаюсь сделать: https://stackoverflow.com/info/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, как указано в комментарии ниже.

Ответ 2

Я пробовал все ответы, но они не удалили внутреннюю тень 1px UISearchBar UITextfield внутри.

Я решил эту проблему, увеличив ширину полосы белого. Он перекрывает тень.

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

Ответ 3

Попробуй это:

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

Ответ 4

Там другой трюк:

Для нижней границы вы можете покрыть его нижним видом (например: tableView) с помощью -1 пикселей.

Для верхней границы, переместите его вверх на 1 пиксель к навигационной панели, также исправьте это.