所以经过google和SO的长时间搜索后,我没有发现类似的问题。有些人接近但不像我的。
手头的问题: 在我的应用程序(基于WKWebView)中,如果显示键盘,我双击主页并切换到显示键盘的另一个应用程序,我的应用程序键盘被隐藏。这不是问题。因此,当我再次执行多任务时,在我的应用程序的快照中,键盘消失了,但我上面的自定义工具栏似乎保持不变,下面没有键盘。我点击我的应用程序,它会动画,然后返回到屏幕底部。
我尝试过的: 我知道[self.view endEditing:YES],resigningFirstResponder以及关闭键盘的所有方法。尝试通过viewWillDisappear,applicationWillResignActive和applicationDidEnterBackground进行放置和混合。这些都不会处理我的工具栏问题。
这就是我在屏幕上和屏幕外设置键盘动画的方式,同时保持工具栏可见。
- (void)keyboardWillShow:(NSNotification*)notification
{
NSDictionary* info = [notification userInfo];
NSNumber *durationValue = info[UIKeyboardAnimationDurationUserInfoKey];
NSNumber *curveValue = info[UIKeyboardAnimationCurveUserInfoKey];
NSValue *endFrame = info[UIKeyboardFrameEndUserInfoKey];
[UIView animateWithDuration:durationValue.doubleValue
delay:0
options:(curveValue.intValue << 16)
animations:^{
self.toolBar.frame = CGRectMake(0,
[endFrame CGRectValue].origin.y - self.toolBar.bounds.size.height+44,
self.toolBar.bounds.size.width,
self.toolBar.bounds.size.height);
}
completion:nil];
}
- (void)keyboardWillHide:(NSNotification*)notification
{
NSDictionary* info = [notification userInfo];
NSNumber *durationValue = info[UIKeyboardAnimationDurationUserInfoKey];
NSNumber *curveValue = info[UIKeyboardAnimationCurveUserInfoKey];
NSValue *endFrame = info[UIKeyboardFrameEndUserInfoKey];
[UIView animateWithDuration:durationValue.doubleValue
delay:0
options:(curveValue.intValue << 16)
animations:^{
self.toolBar.frame = CGRectMake(0,
[endFrame CGRectValue].origin.y - self.toolBar.bounds.size.height,
self.toolBar.bounds.size.width,
self.toolBar.bounds.size.height);
}
completion:nil];
}
有人有线索或想法吗?
我的应用程序再次基于WKWebView,因此直接调用或指向textview,尝试将重点放在webview上是毫无意义的。
如果有人需要更多代码,请告诉我。 任何帮助,将不胜感激。谢谢。
更新1/20/18
所以这里是请求的代码,该代码与我的工具栏的初始化和加载位置和方式有关。
小时。
UIToolbar *toolBar;
@property (nonatomic, strong) UIToolbar *toolBar;
米。
@synthesize toolBar;
- (void)viewDidLoad {
//Toolbar setup
CGRect toolFrame, remain;
CGRectDivide(self.view.bounds, &toolFrame, &remain, 48, CGRectMaxYEdge);
self.toolBar = [[UIToolbar alloc] initWithFrame:toolFrame];
[self.toolBar setBarStyle:UIBarStyleBlackTranslucent];
[self.toolBar setClipsToBounds:YES];
[self.toolBar setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleTopMargin];
[self.view addSubview:self.toolBar];
}
就是这样,除了一些代码在我切换按钮时调用它来刷新它,没有别的东西与这个工具栏绑定。
除非我点击一个开关或需要在用户更改背景时刷新它,否则不会调用它,在另一个视图中处理NSUserDefaults。
-(void)viewWillLayoutSubviews{
[self.currentScrollView layoutIfNeeded];
[self.toolBar layoutIfNeeded];
[self.view layoutSubviews];
}
答案 0 :(得分:0)
以下是对我有用的内容。
在我的AppDelegate.m中,我只需输入endEditing:
- (void)applicationWillResignActive:(UIApplication *)application {
[self.window endEditing:YES];
}
现在在我的keyboardWillShow通知中:
- (void)keyboardWillShow:(NSNotification*)notification
{
/////New added method//////
if([UIApplication sharedApplication].applicationState != UIApplicationStateActive){
return;
}
NSDictionary* info = [notification userInfo];
NSNumber *durationValue = info[UIKeyboardAnimationDurationUserInfoKey];
NSNumber *curveValue = info[UIKeyboardAnimationCurveUserInfoKey];
NSValue *endFrame = info[UIKeyboardFrameEndUserInfoKey];
[UIView animateWithDuration:durationValue.doubleValue
delay:0
options:(curveValue.integerValue << 16)
animations:^{
self.toolBar.frame = CGRectMake(0,
[endFrame CGRectValue].origin.y - self.toolBar.bounds.size.height+44,
self.toolBar.bounds.size.width,
self.toolBar.bounds.size.height);
}
completion:nil];
}
就是这样,毕竟这么简单。只是隐藏键盘,就像我之前做的那样,并检查应用程序是否处于活动状态。
现在,当我双击家中时,键盘会隐藏。如果我转到另一个应用程序,如消息,绘制键盘,再次双击并返回到我的应用程序,键盘永远不会移动。解决我的问题。