Ограничение NavViewItem TitleView не работает - PullRequest
0 голосов
/ 01 октября 2018

Я хочу создать панель поиска, используя UITextField.Я попытался установить TitleView элемента NavigationItem в текстовое поле и установить соответствующие ограничения.Но текстовое поле остается очень коротким в центре панели навигации.Как сделать так, чтобы текстовое поле заполняло всю панель навигации?Вот мой код:

cancelbtn = UIBarButtonItem(title: "Cancel", style: .plain, target: self, action: #selector(CourseTableViewController.searchCancelled))
self.navigationItem.leftBarButtonItem = cancelbtn

let searchField = UITextField()
searchField.translatesAutoresizingMaskIntoConstraints = false
searchField.borderStyle = .roundedRect
self.navigationItem.titleView = searchField
self.navigationItem.titleView!.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: cancelbtn.width)
self.navigationItem.titleView!.widthAnchor.constraint(equalToConstant: view.frame.size.width - cancelbtn.width)

А как это выглядит рН: UIView

Ответы [ 2 ]

0 голосов
/ 01 октября 2018

Я решил свою проблему.Вместо использования titleView я поместил текстовое поле в правый barButtonItem и установил его ширину равной view.frame.size.width.Это дает мне текстовое поле, которое занимает всю навигацию.Я прикрепил код здесь, если кто-то тоже хочет это сделать.

searchBar = UISearchBar()
searchBar.showsCancelButton = false
searchBar.placeholder = "Course name"
searchBar.delegate = self
cancelbtn = UIBarButtonItem(title: "Cancel", style: .plain, target: self, action: #selector(CourseTableViewController.searchCancelled))
self.navigationItem.leftBarButtonItem = cancelbtn

searchTextField = UITextField()
searchTextField.borderStyle = .roundedRect
searchTextField.widthAnchor.constraint(equalToConstant: view.frame.size.width - cancelbtn.width)
searchTextField.translatesAutoresizingMaskIntoConstraints = false
self.navigationItem.rightBarButtonItem = UIBarButtonItem(customView: searchTextField)
self.navigationItem.rightBarButtonItem?.width = view.frame.size.width
0 голосов
/ 01 октября 2018

Об этом следует прочитать руководству Apple.С iOS11 вы должны установить searchBar в навигационный элемент.Попробуйте использовать этот код:

import UIKit

class ViewController: UIViewController, UISearchControllerDelegate {

var searchController = UISearchController()

override func viewDidLoad() {
    super.viewDidLoad()

    navigationController?.navigationBar.prefersLargeTitles = false
    searchController = UISearchController(searchResultsController: nil)
    searchController.delegate = self

    // Customisation 
    searchController.searchBar.tintColor = .black
    searchController.dimsBackgroundDuringPresentation = false

    navigationItem.searchController = searchController
    navigationItem.hidesSearchBarWhenScrolling = false
}

}
...