UISearchBar动画隐藏按钮

6

我目前有一个UISearchBar(附加到UISearchDisplayController),但我减小了搜索栏的宽度,以便在未选择搜索栏时显示其右侧的自定义按钮。该按钮用于访问其他视图。

然而,当我选择搜索栏,然后按取消(甚至执行搜索)并返回到正常视图时,搜索栏会动画化并占据所有按钮的空间而不显示。实质上,搜索栏占据了整个屏幕的宽度,而我只想让它占据部分宽度。

是否有任何方法可以防止搜索栏动画化到整个屏幕宽度?

这是我如何定义搜索栏的CGRect:

self = [[UISearchBar alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 250.0f, 45.0f)]
2个回答

3
最终,这个问题的答案比我想象的更简单。由于某种原因,iPhone SDK填充了搜索栏框架的宽度,因此每次用户按下取消按钮并触发searchBarCancelButtonClicked()事件时,我都必须不断地将其重置为所需大小。一个简单的[searchBar setFrame:frame]就解决了它。 :)
彼得,你链接中的帖子问题略有不同,我已经能够将搜索栏调整为所需大小,我需要的是防止它回到全宽状态。不过还是谢谢你提供的链接。

1
知道在这里使用哪个搜索栏代理方法是关键。在我看来,可能有太多的方法。编辑:实际上,在searchBarCancelButonClicked中设置框架对我不起作用。我已经接受了在searchDisplayControllerDidEndSearch方法中设置框架,这很烦人,因为它会动画到屏幕的全宽,然后再动画回我想要的大小。 - livingtech
我的帖子有点老了,也许一年间发生了一些变化。我无法检查我的代码是否仍然有效。希望你能尽快找到解决方案! - David Carvalho
@livingtech 我有和你完全一样的问题。你找到解决方案了吗?我正在尝试找到任何使用UISearchDisplayController的方法,但是因为那一个明显的bug,我想我只能自己实现它的功能了。 - SirRupertIII
是的,我认为我也这样做了。(实现了自定义解决方案。)祝你好运! - livingtech

1

这个帖子可能会有所帮助。听起来你需要子类化UISearchBar以阻止它进行正常的绘制。

更新:我想在UINavigationBar中使用UISearchBar,并在触摸时调整大小以填充栏 - 就像Safari应用程序中的行为一样。我唯一能做到这一点的方法是直接使用UISearchBar。你的问题略有不同,但你可以尝试先使用搜索栏获得所需的UI行为,然后再连接搜索逻辑;即不要依赖UISearchDisplayController?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接