我刚刚在常规的UIViewController中实现了一个UISearchController,我有一个奇怪的问题。
我有一个UIView,它完全符合我希望UISearchBar的尺寸。在第一次启动视图时,我将UISearchBar作为SubView添加到此UIView中。 但是当我启动它时,UISearchBar并没有采用其父UIView的大小 - 它只占用整个屏幕的宽度。
如您所见,它与右侧的按钮重叠。
但是,一旦我点击搜索栏并取消它,它就会调整到我想要的确切尺寸。
这可能是什么问题?我尝试将SearchBar中的AutoLayout约束添加到其父视图中,但它似乎没有任何改变。没有[UIView addSubview:]处理这个吗?
答案 0 :(得分:2)
UISearchController的视图行为确实很奇怪,但有一个简单的解决方法。
此时UISearchController.view不会在container.bounds之外调整大小。
答案 1 :(得分:0)
对我来说这行不通,但是我找到了一个我想分享的解决方案:
与其将searchBar放在containerView中,而不是将NavigationBar放在containerView中,然后将searchBar放在此navigationBar中。对我而言,此刻问题仍然存在。
但是随后我将一个1像素宽的视图作为navigationItem放置在navigationBar的右侧。从那时起一切正常,在第一个选择之后searchBar的文本字段不再伸展。
它更像是一种hack,而不是一个解决烦人的bug(?)的好方法,但是对我来说,这种hack是可以接受的,因为我已经在searchBar的两侧都需要一些余量。这是一些代码:
//在初始化或viewDidLoad上
navigationBar = UINavigationBar(frame: .zero)
let navigationItem = UINavigationItem()
navigationItem.titleView = searchController.searchBar
let leftView = UIView(frame: CGRect(x: 0.0, y: 0.0, width: Design.margin, height: 1))
leftView.backgroundColor = .clear
navigationItem.leftBarButtonItem = UIBarButtonItem(customView: leftView)
let rightView = UIView(frame: CGRect(x: 0.0, y: 0.0, width: Design.margin, height: 1))
rightView.backgroundColor = .clear
navigationItem.rightBarButtonItem = UIBarButtonItem(customView: rightView)
navigationBar.items = [navigationItem]
containerView.addSubview(navigationBar)
//在您的布局中设置框架尺寸