web-dev-qa-db-ja.com

ナビゲーションバーで検索バーを表示し、iOS 13をスクロールせずにも大きなタイトル

IOS 13でnavigationItem.searchControllerUISearchControllerを添付しています。これはうまくいきます。

ただし、デフォルトで大きなタイトルと検索バーを見たいのですが。

navigationItem.hidesSearchBarWhenScrolling = falseを設定します。

誰もがこれをどのように可能であるか知っていますか?

これをチェックしてください

navigationItem.searchController = UISearchController(searchResultsController: nil)
navigationItem.hidesSearchBarWhenScrolling = false

これは実際に見える方法です This is how it looks actually

これが私が実装する必要がある方法です(大きなタイトルと検索バーの両方が目に見える) ---)---(This is how I need to implement(large title and search bar both visible)

10
Bonnke

ViewDidload()メソッドで次の行を追加した後、それは機能しました。

searchController.hidesNavigationBarDuringPresentation = true navigationController?.navigationBar.prefersLargeTitles = true navigationController!.navigationBar.sizeToFit()

3
rohit

さて、私は私のアプリのために一日中同じことを達成しようとしていました、そして、私はついにそれをやりました。

私は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_を設定します。

私にとっては、すべての試行錯誤の後に完全に働いています。

1
Defkalion1

これを試してみてください

    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を安全な領域と下部に追加することです。これは解決策ではありませんが、私はストーリーボードにしました。

0
Kiran Sarvaiya