我想要实现的行为是在UINavigationBar中使用以下布局:
BackButton - UISearchBar - UIBarButtonItem
一旦UISearchBar开始编辑,它需要向左扩展,覆盖BackButton,而cancelButton需要在右边动画。 rightBarButtonItem也需要隐藏。所以最终效果如下:
UISearchBar - CancelBarButtonItem
一旦用户取消了文本输入,就需要动画回到之前的状态。
到目前为止,这是我的代码:
- (void)searchBarTextDidBeginEditing:(UISearchBar *)aSearchBar {
[[self tableView] setScrollEnabled:NO];
[[self navigationItem] setHidesBackButton:YES
animated:NO];
//[aSearchBar sizeToFit];
/*[UIView animateWithDuration:0.25 animations:^{
[aSearchBar setFrame:CGRectMake(0.0f, 0.0f, kSearchBarDefaultWidth + 100.0f, 44)];
[aSearchBar layoutSubviews];
}];*/
// hide the right bar button
[[self navigationItem] setRightBarButtonItem:nil
animated:NO];
[searchBar setShowsCancelButton:YES
animated:NO];
注意我注意到,如果我隐藏后退按钮并将rightBarButton设置为nil,它会调整UISearchBar的大小,但它不会为其设置动画。太奇怪了......