5

UISearchControlleriOS 8 で導入された新しい APIを試しています。API は新しいものですが、同じ古いUISearchBar. に追加しましたUINavigationControllertitleView

ここに画像の説明を入力 ここに画像の説明を入力

import UIKit

class ViewController: UIViewController, UISearchBarDelegate {

    override func viewDidLoad() {
        super.viewDidLoad()

        let searchController = UISearchController(searchResultsController: nil)
        searchController.hidesNavigationBarDuringPresentation = false
        searchController.dimsBackgroundDuringPresentation = false
        searchController.searchBar.delegate = self
        navigationItem.titleView = searchController.searchBar
    }
}

ナビゲーション バーの幅全体を占める検索バーは必要ありません。問題は、サイズを変更できないことです。まずは検索バーの枠を設定してみました。

searchController.searchBar.frame = CGRect(x: 0, y: 0, width: 100, height: 44)

うまくいかなかったので、titleViewのフレームを設定してみました。

navigationItem.titleView!.frame = CGRect(x: 0, y: 0, width: 100, height: 44)

どちらも機能しません。

これを行う別の方法を知っている人はいますか?

ありがとうございました。

4

1 に答える 1

15

別のビューをナビゲーション バーのタイトルとして使用し、その中に検索バーを配置できます。バーの色合いの問題が発生した場合は、backgroundImage プロパティを設定することで解決できます。これはうまくいくはずです:

let searchController = UISearchController(searchResultsController: nil)
searchController.hidesNavigationBarDuringPresentation = false
searchController.dimsBackgroundDuringPresentation = false
searchController.searchBar.delegate = self

let frame = CGRect(x: 0, y: 0, width: 100, height: 44)
let titleView = UIView(frame: frame)
searchController.searchBar.backgroundImage = UIImage()
searchController.searchBar.frame = frame
titleView.addSubview(searchController.searchBar)
navigationItem.titleView = titleView
于 2014-11-07T14:28:21.757 に答える