繁体   English   中英

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

[英]iOS - how to make subviews of a Navigation Bar transparent?

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

在此输入图像描述

这是我现在走了多远:

在此输入图像描述

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

- (void)searchBarCancelButtonClicked:(UISearchBar *)asearchBar
- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar
- (void)searchBarTextDidEndEditing:(UISearchBar *)searchBar
- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar

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

//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
  }
}

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

编辑1:

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

自从我做ios编程以来已经有一段时间了。 有可能即使您设置了alpha,但没有触发重绘。 [UIView setNeedsDisplay]可能有助于在下一个绘图周期中刷新绘图。

作为参考: 强制UIView重绘的最强大的方法是什么?

1)这是UI更新问题,在任何UI更新代码之后编写此语句。

 [[NSRunLoop currentRunLoop] runUntilDate:[NSDate date]];

这将更新您的GUI。

要么

2)在主线程上使用执行选择器并在选择器方法中更新UI。

 [self performSelectorOnMainThread:@selector(UpdateUIMethod) withObject:self waitUntilDone:NO];

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM