IOS 13でnavigationItem.searchController
にUISearchController
を添付しています。これはうまくいきます。
ただし、デフォルトで大きなタイトルと検索バーを見たいのですが。
navigationItem.hidesSearchBarWhenScrolling = false
を設定します。
誰もがこれをどのように可能であるか知っていますか?
navigationItem.searchController = UISearchController(searchResultsController: nil)
navigationItem.hidesSearchBarWhenScrolling = false
これが私が実装する必要がある方法です(大きなタイトルと検索バーの両方が目に見える) ---)---(
ViewDidload()メソッドで次の行を追加した後、それは機能しました。
searchController.hidesNavigationBarDuringPresentation = true navigationController?.navigationBar.prefersLargeTitles = true navigationController!.navigationBar.sizeToFit()
さて、私は私のアプリのために一日中同じことを達成しようとしていました、そして、私はついにそれをやりました。
私はUtiverViewControllerに検索バーを追加したいと思いました、そして私はこのようにしました。
_ let searchController: UISearchController = {
let searchController = UISearchController(searchResultsController: nil)
searchController.searchBar.placeholder = "New Search"
searchController.searchBar.searchBarStyle = .minimal
searchController.dimsBackgroundDuringPresentation = false
searchController.definesPresentationContext = true
return searchController
}()
_
まずクロージャーを使用して新しいUISearchControllerを作成し、そのようにしてコードでグローバルに使用でき、将来それを簡単にカスタマイズできます。
その後、ViewDidLoadでは、_searchSontroller.searchResultsUpdater = self
_と_navigationItem.searchController = searchController
_を設定します。
私にとっては、すべての試行錯誤の後に完全に働いています。
これを試してみてください
private var search = UISearchController(searchResultsController: nil)
override func viewDidLoad() {
super.viewDidLoad()
search.searchBar.delegate = self
search.searchBar.sizeToFit()
search.obscuresBackgroundDuringPresentation = false
search.hidesNavigationBarDuringPresentation = true
self.definesPresentationContext = true
search.searchBar.placeholder = "Search here"
self.navigationItem.searchController = search
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
navigationItem.hidesSearchBarWhenScrolling = false
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
navigationItem.hidesSearchBarWhenScrolling = true
}
_
大規模ナビゲーションバーではこれを使用してください
フルアプリケーションナビゲーションバーのサポートの場合、コード内にこの拡張子を追加してください。
import UIKit
extension UIViewController {
open func showNavigationBar(_ large: Bool,
_ animated: Bool,
titleColor: UIColor,
barTintColor: UIColor,
fontSize: CGFloat) {
navigationController?.navigationBar.barTintColor = barTintColor
navigationController?.navigationBar.backgroundColor = barTintColor
navigationController?.navigationBar.isTranslucent = true
self.navigationController?.setNavigationBarHidden(false, animated: animated)
if large {
self.navigationController?.navigationBar.prefersLargeTitles = true
if #available(iOS 13.0, *) {
let appearance = UINavigationBarAppearance()
appearance.backgroundColor = barTintColor
appearance.titleTextAttributes = [.foregroundColor: titleColor]
appearance.largeTitleTextAttributes = [NSAttributedString.Key.foregroundColor: titleColor,
NSAttributedString.Key.font: UIFont(resource: R.font.robotoMedium, size: fontSize)!]
navigationController?.navigationBar.standardAppearance = appearance
navigationController?.navigationBar.compactAppearance = appearance
navigationController?.navigationBar.scrollEdgeAppearance = appearance
} else {
self.navigationController?.navigationBar.largeTitleTextAttributes = [NSAttributedString.Key.foregroundColor: titleColor,
NSAttributedString.Key.font: UIFont(resource: R.font.robotoMedium, size: fontSize)!]
}
} else {
self.navigationController?.navigationBar.prefersLargeTitles = false
self.navigationController?.navigationBar.titleTextAttributes = [NSAttributedString.Key.foregroundColor: titleColor,
NSAttributedString.Key.font: UIFont(resource: R.font.robotoMedium, size: 20.0)!]
}
}
}
_
そしてこの方法を単に呼び出します
self.showNavigationBar(true, true, titleColor: UIColor.blue, barTintColor: UIColor.red, fontSize: 32.0)
_
それでもうまくいけません
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
search.searchBar.becomeFirstResponder()
}
_
もう1つの解決策は、ストーリーボードとSet-Topで1つのUIViewを追加し、Safe AreaとSet-Topを安全な領域と下部に追加することです。これは解決策ではありませんが、私はストーリーボードにしました。