iOS - 如何使导航栏的子视图透明?

mor*_*189 7 uinavigationbar uisearchbar ios

我一直在为我的导航栏的主要子视图的动画制作动画遇到一些麻烦.这是条形的初始状态:

在此输入图像描述

这是我现在走了多远:

在此输入图像描述

问题是,当搜索处于活动状态时,我需要使所有这些"星形","新"和其他圆形按钮透明(我需要将它们的alpha降低到零).我试图在委托的以下方法中使它们透明:

- (void)searchBarCancelButtonClicked:(UISearchBar *)asearchBar
- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar
- (void)searchBarTextDidEndEditing:(UISearchBar *)searchBar
- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar
Run Code Online (Sandbox Code Playgroud)

在所有这些中我做了完全相同的代码:

//parent is just a pointer of a search delegate, which points to view controller

for (UIView * someViewToFade in parent.navigationController.navigationBar.subviews) {
  if (someViewToFade.tag == 88 || someViewToFade.tag == 11) {
    NSLog("someViewToFade.alpha before changes = %f", someViewToFade.alpha);
    someViewToFade.alpha = 0.0; //or 1.0, depending on the method
  }
}
Run Code Online (Sandbox Code Playgroud)

但是,我无法通过这种方式获得所需的结果,虽然我在NSLog上获得了正确的alpha值,但按钮根本不会消失.我有什么可能做错的建议吗?

编辑1:

我想我应该在我的案例中添加一些视图层次结构的描述.好吧,我有UISegmentedConrol,它包含这些圆形按钮和两个UIImageViews,分段控制的背景和三角形指针.所有这些视图都会作为子视图添加到导航栏中.还有一个矩形视图,它包含搜索栏,稍后也会作为子视图添加到导航栏,因此它是层次结构中的顶视图.此外,我通过简单地设置其superview框架的动画来动画我的searchBar(扩展或缩小它,当上面的事件发生在委托中时).我希望我已经提供了所有必要的信息.

ssi*_*lla 1

好久没有做ios编程了。有可能即使您设置了 Alpha,但没有触发重绘。[UIView setNeedsDisplay] 可能有助于在下一个绘图周期刷新绘图。

供参考:强制 UIView 重绘的最可靠方法是什么?

  • 设置 alpha 后不必重新绘制视图。 (2认同)