UISearchBar宽度embedded在UINavigationBar内时不会更改

我正在尝试UISearchController引入的新的UISearchController 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 } } 

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

 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) 

他们都没有工作。

有谁知道另一种方式来做到这一点?

谢谢。

您可以使用另一个视图作为导航栏标题,并在其中放置search栏。 如果出现色块颜色问题,可以通过设置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