UISearchBar带有状态栏动画过渡的bug(iOS7)

4

我有一个关于UISearchBar动画的问题。

当状态栏开启时,动画会出现问题。其他情况下它是好的。 我通过编程创建了tableview和searchbar。UISearchbar位于tableview的headerview中。这很重要,它需要保持这样的状态。我知道如果使用storyboard它能正常工作。

我创建了一个非常基本的示例项目,因为我认为这是展示问题最简单的方法。 我已经花费了数小时来寻找解决方案,但我无法想出答案。非常感谢任何帮助。

这里是示例项目的链接:SearchBarProject


你解决了这个问题吗?我也遇到了同样的问题并开了另一个问题-->https://dev59.com/1GIk5IYBdhLWcg3wN71j - luca
不,最终我使用了 displaysSearchBarInNavigationBar 方法,并将搜索栏放入导航栏中。虽然不完全符合我的初衷,但已经能够解决问题了。如果你找到了解决方案,能否在这里回答并提供链接?谢谢。 - Zoltan Krix
3个回答

2

I found that

self.navigationController.navigationBar.translucent = YES;

优化了我的动画,使其更加流畅稳定。


这对我有效,虽然有点烦人,因为我不得不为颜色变化进行补偿。 - Ken

1
我认为这是IOS 7的一个bug。苹果提供了一个uitableview搜索示例应用程序,而且在完成搜索栏编辑时也出现了同样的问题。在IOS 6中没有任何问题。

是的,我也认为这是一个bug。我看到了那个示例项目,也有类似的问题。我找不到解决方法。最后我使用了displaysSearchBarInNavigationBar方法,并将搜索栏放入导航栏中。虽然不完全符合我的预期,但可以解决问题。 我希望他们能尽快修复它或者有人找到解决方法。 - Zoltan Krix
3
我发现在IOS 7中有一个问题,你需要设置edgesForExtendedLayout,像这样:self.edgesForExtendedLayout = UIRectEdgeNone; - ryback smith
这样做会更好,但动画仍然看起来有点不稳定。 - Zoltan Krix
这样做可以使我的动画正确,但导航栏的半透明效果被取消了,所以颜色与其他视图控制器不匹配。也许在所有视图控制器上使用这个来保持颜色的一致性会起作用。 - Jonathan Brown

-1
只需向UISearchBar添加一个子层,并更改视图的背景颜色,即可使动画几乎完美。
- (void) searchDisplayControllerWillEndSearch:(UISearchDisplayController *)controller {
    self.view.backgroundColor = RGB(199,199,204);

    self.fixSearchAnimation = [[UIView alloc] initWithFrame:CGRectMake(0, -20,320, 40)];
    self.fixSearchAnimation.backgroundColor = RGB(199,199,204);
    [self.searchController.searchBar addSubview:self.fixSearchAnimation];
    [self.searchController.searchBar sendSubviewToBack:self.fixSearchAnimation];
}
- (void) searchDisplayControllerDidEndSearch:(UISearchDisplayController *)controller {
    self.view.backgroundColor = [UIColor whiteColor];
    [self.fixSearchAnimation removeFromSuperview];
}

在慢速模式下,您仍然可以看到搜索栏原点子视图和新视图之间的细小线条,但对于用户来说并不是非常明显,如果这会干扰您,您可以深入了解UISearchbar的视图层次结构,并将视图放置在正确的位置。

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