无法为 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 - 无法将子视图框架设置为父视图边界