UISearchController searchBar框架仅在第一次单击时调整大小

时间:2017-04-07 12:36:07

标签: ios objective-c uiview uisearchcontroller

我刚刚在常规的UIViewController中实现了一个UISearchController,我有一个奇怪的问题。

我有一个UIView,它完全符合我希望UISearchBar的尺寸。在第一次启动视图时,我将UISearchBar作为SubView添加到此UIView中。 但是当我启动它时,UISearchBar并没有采用其父UIView的大小 - 它只占用整个屏幕的宽度。

enter image description here

如您所见,它与右侧的按钮重叠。

但是,一旦我点击搜索栏并取消它,它就会调整到我想要的确切尺寸。

enter image description here

这可能是什么问题?我尝试将SearchBar中的AutoLayout约束添加到其父视图中,但它似乎没有任何改变。没有[UIView addSubview:]处理这个吗?

2 个答案:

答案 0 :(得分:2)

UISearchController的视图行为确实很奇怪,但有一个简单的解决方法。

  • 使用其他容器视图
  • 将UISearchController的视图放在
  • 将UISearchController的视图自动调整掩码设置为UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight
  • 将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)

//在您的布局中设置框架尺寸