2016-08-11 2 views
2

В моем приложении iOS у меня есть панель навигации, состоящая из UISearchBar и UIButton в UIStackView. Поскольку я не могу раскадровку UISearchController У меня есть пустой UIView в представлении стека, и я добавляю UISearchBar в качестве подзаголовка. Вот что моя раскадровки выглядит следующим образом: enter image description hereПочему мой UISearchBar не подчиняется ограничениям?

Вот мой код, чтобы добавить планку Поиск

override func viewDidLoad() { 
    super.viewDidLoad() 
    configureSearchController() 
    print(wrapperView.bounds) 
    print(searchController.searchBar.bounds) 
} 

func configureSearchController() { 
    searchController = UISearchController(searchResultsController: nil) 
    searchController.dimsBackgroundDuringPresentation = false 
    searchController.searchBar.placeholder = "Search here..." 
    searchController.searchBar.sizeToFit() 
    searchController.searchBar.isTranslucent = false 
    searchController.searchBar.delegate = self 
    searchController.delegate = self 
    searchController.searchBar.barTintColor = addButton.backgroundColor 
    wrapperView.addSubview(searchController.searchBar) 
    let color = addButton.backgroundColor 
    searchController.searchBar.layer.borderWidth = 1 
    searchController.searchBar.layer.borderColor = color?.cgColor 
    searchController.searchBar.trailingAnchor.constraint(equalTo: addButton.leadingAnchor) 
} 

Но панель поиска идет мимо UIButton, как показано здесь: enter image description here Как я могу получить UISearchBar к конец на UIButton вот так? enter image description here

+0

Попробуйте переместить кнопку над представлением обертки в списке uiobject –

+0

@SaintThread Это ставит 'UIButton' перед панелью поиска. –

+0

Извините, я неправильно понял вопрос, можете ли вы использовать ограничения оболочки? Может быть, у вас есть переход к родительскому взгляду, а не к кнопке –

ответ

0

Попробуйте заменить:

searchController.searchBar.trailingAnchor.constraint(equalTo: addButton.leadingAnchor) 

с:

searchController.translatesAutoresizingMaskIntoConstraints = false 
wrapperView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|-0-[subview]-0-|", options: nil, metrics: nil, views: ["subview": searchController])) 
wrapperView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|-0-[subview]-0-|", options: nil, metrics: nil, views: ["subview": searchController])) 

EDIT: В противном случае попробуйте с UISearchController:

searchController.searchBar.setImage(<image_name>, forSearchBarIcon: .Bookmark, state: .Normal) 

это алло Чтобы добавить пользовательскую кнопку рядом с панелью поиска.

+0

Swift 3 не позволит мне пройти nil in для опций –

+0

попробуйте пустой массив: '[]' –

+0

Он взял пустой массив, но теперь app crashes –

0

У меня возникла такая же проблема, и я смог ее исправить, позвонив по телефону searchController.searchBar.sizeToFit() после добавления его в мое представление (сразу после строки addSubview()). Вы, возможно, придетесь запустить wrapperView.layoutIfNeeded() раньше, так что-то вроде этого:

wrapperView.addSubview(searchController.searchBar) 
wrapperView.layoutIfNeeded() 
searchController.searchBar.sizeToFit() 

Надеется, что это помогает!

Смежные вопросы