3

更新 2

私の疑いは正しかった。問題はアニメーションにありました。これは、インコール ステータス バーが表示されているときに異なる Y 軸の原点を考慮していなかったためです。関連するコードも示す回答を追加します。

更新 1

メニューのアニメーションが問題を引き起こしていると思いました。メニューを押すと、アニメーションが開始されてメニューが表示されます。アニメーションは、提示された VC を右にスライドさせ、少しだけ縮小し、z 軸で回転させて滑らかにクールに見せます。その方向で調査し、何か見つけたら更新します。

元の投稿

アプリで通話中ステータス バーを表示しているときに、いくつかの UI の問題に気付きました。

ナビゲーション バーとして機能し、メニューに戻るための小さなボタンを含むカスタム ビューがあります。(私はそれを呼びます menuBtn)。tableViewHeaderこのカスタム ナビゲーション バーの下に、テーブル内の日の間を移動するための 2 つのボタンを含むテーブル ビューがあります。(これらのボタンを :prevBtenと と呼びますnextBtn)。これらの 3 つのビューを例として使用しますが、問題はいたるところで発生します...

通常、すべてが完璧に機能し、期待どおりに機能します。通話中のステータス バーが表示されるようになっても、サイズ変更は完璧に機能し、生活は快適です。クリックすると問題が発生menuBtnし、現在のビューがスライドしてメインメニューが表示されます(そうすることで、 を切り替えますStoryboards)。ここで、元の画面に戻ると、すべてのビューは (サイズ的には) 問題ないように見えますが、タップ領域がボタンの画像と一致していません。あるべき場所にボタンが表示されますが、タップしても何も起こりません。奇妙な点は、ボタンのをタップすると、それらのボタンへのアクション バインドがトリガーされることです。

さらに奇妙なことに、問題が発生すると、特定のボタン (つまりmenuBtn)のタップ領域が別のボタン ( )と重なることがありますprevBtn

原因/解決策をしばらく探していました。私は運が悪いと次の記事を読みました:

  1. ClipToBounds親ビュー
  2. で遊んでAutoResizingMasks

Storyboardsインターフェイスビルダーで自動サイズ変更を設定しようとしてもうまくいきませんでしたが、切り替えているという事実と関係があるという予感がしました。

助けたい人に役立つかもしれないいくつかのコード

menuBtnが押されたときにトリガーされるメソッド:

- (void)replaceChildStoryboard:(NSString *)storyboardName
{
//remove previos child's view and itself from parent
[currNav removeFromParentViewController];
[currNav.view removeFromSuperview];

//instantiate new storyboard
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:storyboardName bundle:nil];
UINavigationController *vc = [storyboard instantiateInitialViewController];

//update curr pointer to new child and add it to parent
currNav = vc;
[self addChildViewController:currNav];
[self.view addSubview:currNav.view];
[currNav didMoveToParentViewController:self];

//animate transition
[self slideNavAnimated:NO];
[self navPressed];

}

いくつかのスクリーンショット

prevBtn3 番目のスクリーンショットでは、 ( の下にあるmenuBtn)をタップすると、menuBtn代わりにアクションがアクティブになります。prevBtn(私が描いた円で示されているように-赤い円の内側をmenuBtnタップするとprevBtn

通常状態 通話中ステータスバーが開いています タップエリアが間違っています

誰かが問題の根本に到達して修正するのを手伝ってくれることを願っています.

前もって感謝します。

4

1 に答える 1

0

私の質問の 2 回目の更新で述べたように、問題はメニューのアニメーションにあるようです。通話中のステータスバーの状態(可視\不可視)によってy軸のビューの原点が異なるという事実は、もともと考慮していませんでした。

アニメーションの計算に Y 軸の原点を追加することで、問題が解決しました。したがって、すべての呼び出しは次のようになります。

 //adding the animations
      [currNav.view.layer addAnimation:[NRAnimationFactory positionAnimationFrom:CGPointMake(centerOriginX, self.view.frameHeight/2)
                                                                              To:CGPointMake(self.view.frameWidth, self.view.frameHeight/2)
                                                                        Duration:duration]
                                forKey:@"moving"];   

私はそれをに変えます

 //adding the animations :
      [currNav.view.layer addAnimation:[NRAnimationFactory positionAnimationFrom:CGPointMake(centerOriginX, self.view.originY + self.view.frameHeight/2)
                                                                              To:CGPointMake(self.view.frameWidth, self.view.originY + self.view.frameHeight/2)
                                                                        Duration:duration]
                                forKey:@"moving"];   

self.view.originY通話中のステータス バーが非表示の場合は 0、それ以外の場合は 20 に等しい追加の値に注意してください。

これが誰にも役立つことを願っています。私はそれに数日を無駄にしました!

于 2014-03-11T12:14:21.827 に答える