无法为 UISearchBar 的框架或边界设置动画

Posted

技术标签:

【中文标题】无法为 UISearchBar 的框架或边界设置动画【英文标题】:Can't animate the frame or bounds of a UISearchBar 【发布时间】:2012-03-09 15:13:07 【问题描述】:

我想为 UISearchBar 的位置设置动画,但是当我更改 UISearchBar 的 frame 或 bounds 属性时没有动画效果(center, alpha dose animate)。 它是 ios SDK 4.2,有错误吗?我很困惑...

【问题讨论】:

【参考方案1】:

问题是一些内部搜索栏视图强制调整大小以忽略动画。

这对我有用 -

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

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

【讨论】:

你不应该直接调用layoutSubviews,而是最好调用[searchBar setNeedsLayout]; [搜索栏布局如果需要]; 我发现如果将搜索栏放在导航栏的右侧,布局和调整大小后,搜索栏并没有回到原来的位置。如何解决这个问题?【参考方案2】:

使用UIViewAnimationOptionLayoutSubviews 选项:

[UIView animateWithDuration:.25
                      delay:0
                    options:UIViewAnimationOptionLayoutSubviews
                 animations:^
                     CGRect frame = searchBar.frame;
                     frame.size.width = newWidth;
                     searchBar.frame = frame;
                  completion:nil
 ];

【讨论】:

【参考方案3】:

试试这个:

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

【讨论】:

我试过了,没用。我知道动画视图的方法,但是 UISearchBar 在我动画它的大小时没有以正确的方式动画。 我试过Core Animation,得到了同样的结果。似乎 UISearchBar 在我们与之交互时做了一些额外的工作(当我单击其中的文本区域时它会自动调整大小)。 为我工作。你能告诉我你的代码吗?我没有看到的第一个猜测是你的搜索显示控制器有一个坏/零句柄。你能扔一个 NSLog 看看吗? 请尝试CGRectMake(0, 0, 200, 150); 您试图改变框架的大小,而不是框架的原点?是的,似乎 searchBar 的大小受到操作系统的限制。我认为可能需要在这里推出自己的产品。

以上是关于无法为 UISearchBar 的框架或边界设置动画的主要内容,如果未能解决你的问题,请参考以下文章

NSLayoutConstraint - 无法将子视图框架设置为父视图边界

动画 UISearchBar 框架的宽度

动网格边界设置

无法访问 UISearchBar 方法

UISearchBar 未设置为 UITableView.tableHeaderView

无法与 UITableView 中的 UISearchBar 交互