UISearchBar宽度在嵌入UINavigationBar时不会改变

Isu*_*uru 4 uisearchbar ios swift ios8 uisearchcontroller

我正在尝试UISearchControlleriOS 8中引入的新API.尽管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
    }
}
Run Code Online (Sandbox Code Playgroud)

我不需要搜索栏来获取导航栏的整个宽度.问题是我无法调整它的大小.首先,我尝试设置搜索栏的框架.

searchController.searchBar.frame = CGRect(x: 0, y: 0, width: 100, height: 44)
Run Code Online (Sandbox Code Playgroud)

这没用,所以我试着设置titleView框架.

navigationItem.titleView!.frame = CGRect(x: 0, y: 0, width: 100, height: 44)
Run Code Online (Sandbox Code Playgroud)

它们都不起作用.

有谁知道另一种方法吗?

谢谢.

Tis*_*ish 14

您可以使用另一个视图作为导航栏标题并在其中放置搜索栏.如果出现条纹色彩问题,可以通过设置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
Run Code Online (Sandbox Code Playgroud)