2017-02-09 6 views
5

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ベースであるため、直接呼び出すかtextviewsに向けて、webviewに集中しようとすると無意味です。

誰かがもっとコードを必要とする場合は、私に知らせてください。 ご協力いただければ幸いです。ありがとうございました。

だからここ1/20/18

更新はどこで、どのように私のツールバーが初期化され、ロードされるに関連する要求されたコードです。

h。

UIToolbar *toolBar; 
@property (nonatomic, strong) UIToolbar *toolBar; 

m。それについてです

@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

これは私のアプリに依然として永続的な問題です。 – ChrisOSX

+0

ツールバーはどこで作成しましたか? – ChikabuZ

+0

アプリが読み込まれると、メインビュー(viewDidLoad)で作成されます。私はそれをhファイルでプロパティで作成し、mファイルで合成してサブビューに追加しました。 – ChrisOSX

答えて

0

以下は私のために働くものです。それは、後にすべてのように単純なものだった

- (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];  
} 

私keyboardWillShow通知で今すぐ
- (void)applicationWillResignActive:(UIApplication *)application { 
    [self.window endEditing:YES]; 
} 

:I簡単に言えばendEditing私AppDelegate.mで

。前と同じようにキーボードを隠すだけで、アプリがアクティブかどうかを確認できます。

私が二重にタップすると、キーボードは非表示になります。私がメッセージのような別のアプリに行くなら、キーボードを作って、もう一度タップして、私のアプリに戻ってください。キーボードは動かされません。私の問題を解決する。

関連する問題