我在底部工具栏上有一个UISearchBar。问题是键盘一旦点击它就会掩盖它。我试图想办法解决这个问题。我尝试将它添加到顶部,但由于我使用的是UINavigationController,因此我遇到了一些意想不到的行为。 (就像键盘在屏幕上并且没有恢复到原始大小时,rightBarButtonItem的customView中的UISearchBar会延长,当按下键盘时整个NavigationBar会离开屏幕,所以你甚至看不到你输入的是什么那种情况要么。)
所以作为一种解决方法,我以为我可以在工具栏的右下角有用于搜索的systemIcon,然后当键盘弹出时,搜索栏可以成为键盘的一部分,然后你可以看到什么你输入。有谁知道我会怎么做?谢谢。
答案 0 :(得分:2)
来自Apple的HIG for IOS:
在列表中显示 列表中的搜索栏或列表中的索引。用户期待 在这个位置找到一个搜索栏,因为他们习以为常 联系人和其他应用程序中的搜索栏。进行搜索 此位置的栏表示它在用户的方式时不受影响 他们滚动列表或使用索引,但是 在需要时可以方便地使用。
可能在屏幕底部显示搜索栏并不意味着; )
将UISearchbar置于自定义ViewController的顶部应该可以正常工作。 也许分享一些代码?
答案 1 :(得分:1)
铍正在走上正轨。这里有一些代码可以帮助你实现目标。
//
//in viewDidLoad register for notifications
[self registerForKeyboardNotifications];
//in viewdidload hide the search bar
CGRect rect = searchBar.frame;
rect.origin.y = 480;
searchBar.frame = rect;
//own function register for keyboardwillshow
- (void)registerForKeyboardNotifications
{
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];
}
//when button is pushed move the searchbar into view. you may have to play with the pixels a bit to make sure it lands on top, and flush
- (void)keyboardWillShow:(NSNotification*)aNotification
{
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.3];
CGRect rect = searchBar.frame;
rect.origin.y = 180; //adjust the 180 to get it to land where you want
searchBar.frame = rect;
[UIView commitAnimations];
}
//own function hide the search bar when the keyboard is dismissed
- (void)keyboardWillHide:(NSNotification*)aNotification
{
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.3];
CGRect rect = searchBar.frame;
rect.origin.y = 480;
searchBar.frame = rect;
[UIView commitAnimations];
}
答案 2 :(得分:0)
我看到了这项任务的几个解决方案。简而言之,您创建了一个UISearchBar / UIToolbar,为UIKeyboardWillShowNotification
添加了观察者,当此通知触发动画时,您创建了UISearchBar / UIToolbar 0.3秒。链接: