UISearchBar 的宽度在嵌入 UINavigationBar 时不会改变
Posted
技术标签:
【中文标题】UISearchBar 的宽度在嵌入 UINavigationBar 时不会改变【英文标题】:UISearchBar width doesn't change when its embedded inside a UINavigationBar 【发布时间】:2014-11-03 20:37:11 【问题描述】:我正在试验 ios 8 中引入的新 UISearchController
API。虽然 API 是新的,但它使用相同的旧 UISearchBar
。我将它添加到UINavigationController
的titleView
。
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)
它们都不起作用。
有人知道另一种方法吗?
谢谢。
【问题讨论】:
【参考方案1】:您可以使用另一个视图作为导航栏标题并在其中放置搜索栏。如果出现 bar tint color 问题,可以通过设置 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
【讨论】:
效果很好!谢谢。 工作完美。谢谢!以上是关于UISearchBar 的宽度在嵌入 UINavigationBar 时不会改变的主要内容,如果未能解决你的问题,请参考以下文章
UINavigationBar 中的 UISearchBar 在旋转方向时改变宽度
修改 UITableView 标头中的 UISearchBar 宽度
嵌入 UISplitViewController 时,UINavigationBar 中缺少 iOS11 UISearchBar