1

多くのトピックを読みましたが、解決策が見つかりません:-(多分あなたが助けることができます!

私のストーリーボード (iPad アプリ用) には、次のものがあります: - 初期シーンであるナビゲーション コントローラー - 次の階層を含むビュー コントローラーを開くセグエ:プロンプト付きバー -> マップ ビュー - ナビゲーション アイテム -> バー ボタン アイテム

検索バーは下部のツールバーにあり、その結果、クリックするとキーボードが表示され、検索バーが非表示になります。すべてを上にスクロールして検索バー (ナビゲーション、マップ、ツールバーなど) を表示したいと考えています。

キーボード通知を登録し、IOS のドキュメントに記載されているコードを実装しました。

- (void)keyboardWasShown:(NSNotification*)aNotification

{ NSDictionary* info = [aNotification userInfo]; CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;

UIEdgeInsets contentInsets = UIEdgeInsetsMake(0.0, 0.0, kbSize.height, 0.0);
scrollView.contentInset = contentInsets;
scrollView.scrollIndicatorInsets = contentInsets;

// If active text field is hidden by keyboard, scroll it so it's visible
// Your application might not need or want this behavior.
CGRect aRect = self.view.frame;
aRect.size.height -= kbSize.height;
if (!CGRectContainsPoint(aRect, activeField.frame.origin) ) {
    CGPoint scrollPoint = CGPointMake(0.0, activeField.frame.origin.y-kbSize.height);
    [scrollView setContentOffset:scrollPoint animated:YES];
}

}

このコードが実行されると、何かが発生したように見え (マップ ビューにマップではなく白いビューが表示されます)、キーボードは表示されますが、検索バーはまだ表示されません。

ビュー階層に問題はありますか? ナビゲーションコントローラーに埋め込まれているためですか?私はこの問題について少し迷っています。階層に scrollView を配置する前に、単純なビューを使用していましたが、検索バーの問題により、単純なビューをスクロール ビューに置き換えました。あなたの助けは非常に高く評価されます! ありがとう、

セバスチャン。

4

1 に答える 1

0

間違いを見つけました。アプリが横向きモードで、uiSearchBar の位置がツールバーに対して相対的であるためです。以下は修正です

- (void)keyboardWasShown:(NSNotification *)aNotification {

// Get the Keyboard size
NSDictionary* info = [aNotification userInfo];
CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;

// Add to the scroll view a bottom inset equal to height of the keyboard
UIEdgeInsets contentInsets = UIEdgeInsetsMake(0.0, 0.0, kbSize.height, 0.0);
self.scrollView.contentInset = contentInsets;
self.scrollView.scrollIndicatorInsets = contentInsets;

// If active text field is hidden by keyboard, scroll it so it's visible
// Your application might not need or want this behavior.
CGRect aRect = self.view.frame;
aRect.size.height -= kbSize.width; // in landscape mode need to get width and not height!

// Compute the position of the uiSearchBar in the screen (whole scrollview)
CGPoint realPoint = [_LocateCell convertPoint:_LocateCell.frame.origin toView:self.scrollView];

if (!CGRectContainsPoint(aRect, realPoint) ) {
    CGPoint scrollPoint = CGPointMake(0.0, kbSize.width);
    [self.scrollView setContentOffset:scrollPoint animated:YES];
}

}

于 2012-04-30T19:58:25.537 に答える