2012-07-20 23 views
2

我有标准的iPad视图控制器,在顶部有一个自定义导航栏。在xib文件中,我添加了一个与视图右边缘对齐的UISearchBar。搜索栏宽度为320像素。我初始化一个searchdisplaycontroller这样的:带UISearchDisplayController的UISearchBar在屏幕外部动画

// Search display controller 
self.mySearchDisplayController = [[UISearchDisplayController alloc] initWithSearchBar:_searchBar 
                       contentsController:self]; 
_mySearchDisplayController.delegate = self; 
_mySearchDisplayController.searchResultsDataSource = self; 
_mySearchDisplayController.searchResultsDelegate = self; 

的问题是,当我按下搜索栏,栏大小调整是整个视图的整个宽度,但保持其x位置。这意味着它在屏幕外延伸很远。我猜测它与在搜索栏旁边滑动的“取消”按钮有关。如果我将搜索栏放在屏幕的最左侧,它将动画显示为屏幕的整个宽度,并且取消按钮是可见的。

任何人都有解决方案吗?

回答

2

您可以动画的UISearchBar的框架中searchDisplayControllerWillBeginSearch方法来纠正这样的立场:完成搜索后,当再次

- (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 if you need to 
    [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 arrayWithObjects: /* put your bar button items here */] animated:YES]; 
        }]; 
} 

我已经回答一个类似的问题,你可以检查它here,我也放了一些图片。

您唯一需要做的就是调整iPad的代码。