我正在尝试转换UISearchBar,就像在Mobile Safari中一样:触摸搜索字段,它会在位置字段缩小时增长。
我当前改变搜索字段宽度和位置的动画只会动画显示位置:在它滑动到正确位置之前,它只是快速跳到正确的宽度。这是我的代码:
[UIView beginAnimations:@"searchGrowUp" context:nil];
[UIView setAnimationCurve:UIViewAnimationCurveEaseIn];
[UIView setAnimationDuration:0.5f];
[UIView setAnimationDelegate:self];
CGFloat findFieldWidth = findField.frame.size.width;
CGFloat urlFieldWidth = urlField.frame.size.width;
CGRect findFieldFrame = findField.frame;
CGRect urlFieldFrame = urlField.frame;
findFieldFrame.origin.x = findFieldFrame.origin.x - 150.0f;
findFieldFrame.size.width = findFieldWidth + 150.0f;
urlFieldFrame.size.width = urlFieldWidth - 150.0f;
urlField.frame = urlFieldFrame;
findField.frame = findFieldFrame;
[UIView commitAnimations];
为了在这里展示,我稍微修改了这段代码,但我希望这能给出要点。
任何关于为什么会发生这种情况的猜测都会受到赞赏!
干杯, 亚伦。
答案 0 :(得分:12)
感谢这篇文章:Changing the size of the UISearchBar TextField?
原来UISearchBar的内容不会与外层一起正确调整大小。所以你必须在搜索栏上设置框架后在动画块中调用-layoutSubviews :.所以该块结束如:
[findField setFrame:CGRectMake(findField.bounds.origin.y, findField.bounds.origin.y, findFieldWidth, findField.bounds.size.height)];
[findField layoutSubviews];
[UIView commitAnimations];
道具给尼克法里纳!
答案 1 :(得分:7)
尝试设置UISearchBar
的宽度时,我遇到了同样的问题。
在iOS 4及更高版本中,我发现使用UIViewAnimationOptionLayoutSubviews
作为
+[UIView animateWithDuration:delay:options:animations:completion:]
修好了。
答案 2 :(得分:3)
接受的答案有效,但根据Apple文档,您“不应该调用此方法”。干净的解决方案是使用layoutIfNeeded
方法:
[UIView animateWithDuration:UINavigationControllerHideShowBarDuration
delay:0.f
options:UIViewAnimationOptionCurveEaseInOut
animations:^{
[searchBar setFrame: ...
[searchBar layoutIfNeeded];
...
享受!
答案 3 :(得分:1)
抱歉这有点旧,但我遇到了类似的问题。 我不想使用layoutSubviews,因为文档说你不应该直接调用该方法。
我为解决我的问题所做的是在动画块的子视图中调用 sizeToFit 。