2017-02-24 12 views
0

私のアプリでは厄介なバグを扱っています。私はキーボードの表示と非表示を扱うチャット・ビュー・コントローラーを持っています。しかし、奇妙な部分は、バックグラウンドでアプリを置くときです。アプリがバックグラウンドから復帰したときに黒い画面が表示される

これは

enter image description here

(ホームボタンをタップする)バックグラウンドに行く前に、ビューコントローラであると私は置けば背景

enter image description here

から戻ったときに、これはアプリですアプリをバックグラウンドで使用すると、黒い画面が1秒間表示されますが、電話をブロックしてからロックを解除すると、黒い画面がそこに保持されます。

これは私のtableViewの下部に最初のメッセージを表示するために反転されたメッセージを表示するために使用されるキーボード

- (void)keyboardWillShowWithRect:(CGRect)rect 
{ 
    //We adjust inverted insets because tableview will be inverted 
    CGFloat displacementDistance = rect.size.height - self.composeBarView.bounds.size.height; 
    self.tableView.contentInset = UIEdgeInsetsMake(self.composeBarView.bounds.size.height, 0, displacementDistance, 0); 
    [self.view setFrame:CGRectMake(self.view.frame.origin.x, self.view.frame.origin.y - displacementDistance, self.view.frame.size.width, self.view.frame.size.height)]; 
} 

- (void)keyboardWillDismissWithRect:(CGRect)rect 
{ 
    //We adjust inverted insets because tableview will be inverted 
    CGFloat displacementDistance = rect.size.height - self.composeBarView.bounds.size.height; 
    self.tableView.contentInset = UIEdgeInsetsMake(self.composeBarView.bounds.size.height, 0, 0, 0); 
    [self.view setFrame:CGRectMake(self.view.frame.origin.x, self.view.frame.origin.y + displacementDistance, self.view.frame.size.width, self.view.frame.size.height)]; 
} 

に対処する方法です。ここで私はそれを行う方法は次のとおりです。

- (void)setupTableView 
{ 
    self.tableView.delegate = self; 
    self.tableView.dataSource = self; 
    //We adjust inverted insets because tableview will be inverted 
    self.tableView.contentInset = UIEdgeInsetsMake(self.composeBarView.bounds.size.height, 0, 0, 0); 
    self.tableView.rowHeight = UITableViewAutomaticDimension; 
    self.tableView.estimatedRowHeight = 500.0; 
    self.tableView.sectionFooterHeight = 30.0; 
    self.tableView.showsVerticalScrollIndicator = NO; 
    [self.tableView registerNib:[UINib nibWithNibName:@"MessagesDateHeader" bundle:nil] forHeaderFooterViewReuseIdentifier:@"MessagesDateHeader"]; 

    // Table View is inverted so we display last messages at the bottom instead of top 
    self.tableView.transform = CGAffineTransformMakeRotation(-M_PI); 
    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(didTapOnTableView)]; 
    tap.numberOfTapsRequired = 1; 
    [self.tableView addGestureRecognizer:tap]; 
} 

をまた、私は私に何が起こっているかのヒントを与えることができますviewDidLoad

誰にもself.definesPresentationContext = YES;セットを持っていますか?

ありがとうございました

+0

は、Xcodeののビューのデバッグ機能を試してみてください示して

あなたはUIKeyboardWillChangeFrameNotificationに耳を傾け、

- (void) keyboardWillChangeFrame:(NSNotification *)notification { NSDictionary *userInfo = [notification userInfo]; CGRect keyboardFrameEnd = [userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue]; keyboardFrameEnd = [self.view convertRect:keyboardFrameEnd toView:nil]; [UIView animateWithDuration:[userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue] delay:0.f options:[userInfo[UIKeyboardAnimationCurveUserInfoKey] intValue] << 16 animations:^{ self.bottomConstraint.constant = CGRectGetHeight(self.view.frame) - keyboardFrameEnd.origin.y; [self.view layoutIfNeeded]; } completion:nil]; } 

[self.view layoutIfNeeded]を次のようにそれを扱う使用することができます

代わりのkeyboardWillShowWithRect:に頼るとkeyboardWillDismissWithRect:が使用されています。表示されているビューとその関係を表示する必要があります。 –

+0

'self.tableView.transform = CGAffineTransformMakeRotation(-M_PI)'で何を達成したいですか?これはビューを回転させますが、メッセージの順序は変更されません – lukwuerz

+0

Beforアプリがバックグラウンドにあります。キーワードが画面に表示されているかどうかを確認してください。キーワードの却下方法やビューを表示するには[self.view endEditing:YES]を使用します。 –

答えて

1

以前は同じような問題がありました。キーボードのフレームに基づいてキーボードが表示/非表示になったときのtableViewのサイズ変更が問題でした。 私がやったのは、tableViewの底面とsuperViewの間の制約を設定し、その定数をキーボードの外観/消滅で変更することでした。そのビューは、アニメーション全体

+0

それは働いた。ありがとうございます:D – WedgeSparda

関連する問題