无法对UISearchBar的框架或边界进行动画处理

4

我想要动态地改变UISearchBar的位置,但是当我改变UISearchBar的frame或bounds属性时,没有动画效果(中心点和透明度会自动更新)。
这是iOS SDK 4.2,难道有Bug吗?我很困惑...

3个回答

9

问题在于某些内部搜索栏视图会强制调整大小而忽略动画效果。

以下方法适用于我 -

[UIView animateWithDuration:0.2 animations:^ {
                     [searchBar setFrame:searchBarFrame];
                     [searchBar setNeedsLayout];
                 }];

这里的searchBarFrame是一个需要设置的框架(在搜索栏第一次调整大小之前我会先保存它)


1
不应直接调用layoutSubviews,而是最好调用[searchBar setNeedsLayout]; [searchBar layoutIfNeeded]; - myell0w
我发现,如果将搜索栏放在导航栏的右侧,在布局和调整大小后,搜索栏不会返回到其原始位置。有什么解决办法吗? - fatuhoku

1
使用UIViewAnimationOptionLayoutSubviews选项:
[UIView animateWithDuration:.25
                      delay:0
                    options:UIViewAnimationOptionLayoutSubviews
                 animations:^{
                     CGRect frame = searchBar.frame;
                     frame.size.width = newWidth;
                     searchBar.frame = frame;
                 } completion:nil
 ];

0

试试这个:

[UIView animateWithDuration:0.3 animations:^{
    self.searchDisplayController.searchBar.frame = CGRectMake(0, 200, 320, 44);
}];

我尝试过了,但没有成功。我知道如何为视图添加动画效果,但当我对其大小进行动画处理时,UISearchBar的动画效果并不正确。 - Wot
我尝试了使用核心动画(Core Animation),并获得了相同的结果。似乎当我们与 UISearchBar 进行交互时,它会执行一些额外的操作(当我点击其中的文本区域时,它会自动调整大小)。 - Wot
对我来说可以。你能给我看看你的代码吗?没有看到你的代码,我的第一个猜测是你的搜索显示控制器有问题/为空。你能加入一个NSLog来查看吗? - danh
请尝试使用CGRectMake(0, 0, 200, 150); - Wot
您是试图改变框架的大小,而不是原点吗?是的,看起来搜索栏的大小受操作系统限制。我认为你可能需要自己动手做。 - danh

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