4

アプリのキーボードが部分的に画面に表示される、またはまったく表示されない理由の解決に行き詰まっています。これは、提示された単純なビューコントローラーです。

[self presentViewController:vc_browser animated:YES completion:^{}];

初めて提示すると、すべてが正常に機能します。次に、それを却下します

[self dismissModalViewControllerAnimated:NO];

そして、この $#%! を再び (そしてさらに) 提示するとき 通知からのキーボードフレームのログインが発生します

2012-12-30 00:40:21.618 テスト [12080:907] キーボード フレーム raw {{160, 443}, {0, 44}}

2012-12-30 00:40:21.619 テスト [12080:907] キーボード フレームが変換されました {{320, 886}, {0, 88}}

2012-12-30 00:40:21.836 テスト [12080:907] キーボード フレーム raw {{0, 524}, {320, 44}}

2012-12-30 00:40:21.837 テスト [12080:907] キーボード フレームが変換されました {{0, 1048}, {640, 88}}

下の図では、フォーカスは webView (実際には Google 検索フィールド) 内にあります。

キーボード rect の上のテキスト フィールドにフォーカスを移動すると、{{inf, inf}, {0, 0}} がログに記録されます

viewWillAppear および viewDidAppear は実装されていません

提示されたView Controllerはこの方法でロードされます

_vc = [[VC alloc] initWithNibName:@"VC" bundle:nil];

このView Controllerを他のxibまたは他のストーリーボードから読み込もうとしましたが、問題はまだあります。

これを解決するための助けは素晴らしいでしょう.Thanks.

http://i.stack.imgur.com/xBNZt.png

担当者が 10 未満の画像を投稿できない

4

1 に答える 1

4

私もこれと同じ問題を抱えています。あなたの質問にコメントを投稿する方法がわからない (私はまだスタック オーバーフローに慣れていない) ので、これまでにわかったことを部分的な回答として提供します。まだ完全なソリューションを研究しています。

Xcode 4.5.1 を使用し、私のアプリは iOS 6 を使用します。これは Core Data を使用するユニバーサル アプリであり、iPhone 側は正常に動作します。iPad側はSplit Viewです。詳細ビュー コントローラーから、ユーザーは分割ビュー上でフル ウィンドウを開いて写真を表示できます。写真ビューを閉じると、分割ビューに戻ります。

以下のコードは、フォト ブラウザがどのように呼び出され、閉じられるかを示しています。

[self presentViewController:photoBrowser animated:YES completion:nil];

[self dismissViewControllerAnimated:YES completion:nil];

写真ビューが閉じられた後、キーボードの問題が発生します。

症状: UITextFields または UITextViews を使用した後続のビューで、キーボードが自動的に表示されなくなるか、写真の例のようにキーボードが部分的にしか表示されなくなります。becomeFirstResponder を使用してキーボードを表示します。

[self.noteEdit becomeFirstResponder];

また奇妙なのは、UITextField に触れると、そのビューのすべてのテキスト フィールドが消えることです。

この問題について、Apple Technical Support Incident (TSI) をオープンしました。2012 年 10 月 12 日の返信は次のとおりです。

あなたの事件の最新情報をお伝えしたいと思います。コードとサンプル データベースをお送りいただきありがとうございます。問題を再現できました。詳細ビュー コントローラーでテキスト フィールドが消えるのは、キーボードが UIKeyboardFrameEndUserInfoKey に対して無効なデータを返し、コードがスクロール ビュー フレームを無効なサイズに設定した結果であることが判明しました。この予期しないキーボードの動作の根本的な原因を探し続けており、答えがわかり次第返信します。

UIKeyboardFrameEndUserInfoKey userInfo の値を表示して、彼の返信を確認しました。

NSLog(@"keyboardEndFrame orig.x=%f orig.y=%f size.w=%f, size.h=%f",
      keyboardEndFrame.origin.x, keyboardEndFrame.origin.y, keyboardEndFrame.size.width, keyboardEndFrame.size.height);

案の定、原点 x と y の両方の値は "inf" でした。サイズ値はゼロに設定されました。

今、私はこのすべての原因を知る必要があります。まだ調査中ですが、Apple からの回答があればお知らせします。これはこれまでのところ私を困惑させました。

PS ... 私のアプリ (iPhone & iPad) は iOS 5 で正常に動作していました。

更新 - 2012 年 10 月 17 日:

キーボードの問題の原因は、iOS 6 が方向を処理する新しい方法を実装する際のエラーが原因でした。Split View Controller をサブクラス化して、以下を含めました。

- (NSUInteger)supportedInterfaceOrientations {
return [[self splitViewController] supportedInterfaceOrientations];}

修正されたコードは次のとおりです。

- (NSUInteger)supportedInterfaceOrientations{
return UIInterfaceOrientationMaskPortrait;}

これは、私の Apple Technical Support Incident が次のように返信したときに指摘されました。

キーボードのトラブルの根本原因を突き止めました。SplitController.m では、メソッド supportedInterfaceOrientations が次を呼び出します。 [[self splitViewController] supportedInterfaceOrientations]; 受け取った値を返します。ただし、分割ビュー コントローラの splitViewController プロパティは nil です。これは、他の分割ビュー コントローラ内の分割ビュー コントローラが許可されていないためです。したがって、返される値は 0 であり、これは無効な方向マスクです。

私のアプリは、スタックの一番上にあるビューに基づいてさまざまな方向タイプをサポートしていますが、Split View Controller を正しくコーディングしていませんでした。

Apple テクニカル サポート グループは私を大いに助けてくれました。この情報がお役に立てば幸いです。

乾杯!

于 2012-10-17T03:34:26.673 に答える