UISearchBar:奇怪的扩展动画

时间:2012-05-30 01:24:58

标签: uisearchbar uisearchdisplaycontroller

我正在使用界面生成器中UISearchBar + SearchDisplayController提供的UISearchBar,搜索栏位于视图的右侧,我需要在激活时向左展开,但系统似乎扩展了它向右(在我的情况下,它超出了屏幕),我试图激活它时动画,但系统的动画仍然发生,并有一些奇怪的动画。

有什么方法可以解决这个问题吗?

非常感谢!

1 个答案:

答案 0 :(得分:2)

以下是我发布的类似问题的答案:herehere

正确动画的关键是指定UIViewAnimationOptionLayoutSubviews作为动画的选项。

以下是我对这些类似问题的完整答案:

通常你不想在工具栏中放置一个搜索栏,但是,你似乎想要做一些类似于我所做的事情。

所以这就是我如何做到的,它可能被称为黑客,但它就像一个魅力:)

首先,您必须在界面构建器中进行设置,如下所示:

enter image description here

请注意,搜索不是工具栏的子项,而是在上面。

搜索栏应具有“清晰颜色”背景和灵活的左,右和宽度自动调整遮罩。

您在工具栏下方放置了一个带有黑色背景的1像素标签,即。 [x = 0,y = 44,宽度= 320或帧宽,高度= 1],还有灵活的左,右和宽度自动调整遮罩。这是在搜索显示控制器显示表格后隐藏您获得的一个可见像素视图。没有它就试试看我的意思。

您可以设置任何工具栏项目,并确保为它们设置插座,因为您需要这些项目。

现在代码......

当你开始搜索时:

- (void)searchDisplayControllerWillBeginSearch:(UISearchDisplayController *)controller
{
    // animate the search bar to the left ie. x=0
    [UIView animateWithDuration:0.25f animations:^{
        CGRect frame = controller.searchBar.frame;
        frame.origin.x = 0;
        controller.searchBar.frame = frame;
    }];
    // remove all toolbar items
    [self.toolbar setItems:nil animated:YES];
}

结束搜索时

- (void)searchDisplayControllerDidEndSearch:(UISearchDisplayController *)controller
{
    // animate search bar back to its previous position and size
    // in my case it was x=55, y=1
    // and reduce its width by the amount moved, again 55px
    [UIView animateWithDuration:0.25f 
                          delay:0.0f
                        // the UIViewAnimationOptionLayoutSubviews is IMPORTANT,
                        // otherwise you get no animation
                        // but some kind of snap-back movement 
                        options:UIViewAnimationOptionLayoutSubviews 
                     animations:^{
                         CGRect frame = self.toolbar.frame;
                         frame.origin.y = 1;
                         frame.origin.x = 55;
                         frame.size.width -= 55;
                         controller.searchBar.frame = frame;
                     } 
                     completion:^(BOOL finished){
                         // when finished, insert any tool bar items you had
                         [self.toolbar setItems:[NSArray arrayWithObject:self.currentLocationButton] animated:YES];
                     }];
}

有了这个,我得到了一个很好的动画:)

enter image description here

enter image description here