5

これは、私が知る限り、Xcode の問題である可能性がある奇妙なエラーです。最初のビューが(明らかに)多数のセルを持つ UITableView であるタブバーコントローラーがあります。セルを選択すると、MainStoryboard にセグエが設定され、詳細ビュー コントローラーに移動します。詳細ビューに移動したときにタブバーを非表示にしたいので、ストーリーボードに移動して詳細ビューを選択し、「シミュレートされたメトリック」で始まるエディター画面で「プッシュ時にボトムバーを非表示」をクリックしました。

セルをタップすると、黒いバーがUITableView画面の上部で点滅し、テーブルビューのセルがドロップダウンすることを除いて、すべて正常に機能します(セルが下部のタブバーの下に落ちているかのように)。画面が詳細ビューに移動します。この効果はまったく害はありませんが、非常に当惑させられます。これをスムーズにしたいと考えています。

私が見つけた唯一の修正は、ストーリーボードの「プッシュ時に下部バーを非表示にする」オプションのチェックを外すことです。確かにその黒いバーのフラッシュはなくなりますが、もちろん、詳細ビューに移動するとタブバーが画面に残ります。これは私が望んでいないことです。

何か案は?

完全を期すために、私は先に進んで走りました

[self.navigationController setToolbarHidden:YES animated: YES];

詳細View ControllerのviewWillAppearメソッドで(さらに、ストーリーボードオプションをオンとオフの両方で試してみました)、違いはありませんでした。ツールバーは確かにうまく非表示になりましたが、それでも上部に黒い線が表示されます. とても奇妙。

4

5 に答える 5

2

手遅れであることはわかっています!!! 私は同じ問題に遭遇しました。ビューの自動サイズ変更マスクが正しくなく、UIViewAutoresizingFlexibleTopMargin と正確に一致していないようです。これをxibファイルで確認しました。コードで実行しようとしている場合は、このフラグ -UIViewAutoresizingFlexibleTopMargin - が自動サイズ変更マスクに含まれていないことを確認してください。

これが将来誰かに役立つことを願っています

于 2013-02-27T20:33:57.600 に答える
1

うわー、私は今同じ問題を抱えていて、非常に苦痛で、それに関するネット上の情報はありません.

とにかく、私にとっての簡単な回避策は、現在のビューのフレームを変更してy座標を上に移動し、高さをタブバーの高さだけ大きくすることでした。これにより、新しいビューをナビゲーション コントローラーにプッシュした直後に実行すると、問題が修正されました。また、後で Frame を修正する必要はありませんでした (ビューが再び表示されたときに更新する必要があります)。

モノタッチ コード:

UIViewController viewControllerToPush = new MyViewController();
viewControllerToPush.HidesBottomBarWhenPushed = true; // I had this in the MyViewController's constructor, doesn't make any difference
this.NavigationController.PushViewController(viewControllerToPush, true);
float offset = this.TabBarController.TabBar.Frame.Height;
this.View.Frame = new System.Drawing.RectangleF(0, -offset, this.View.Frame.Width, this.View.Frame.Height + offset);

Objective C コード (未テスト、モノタッチ コードの翻訳のみ):

UIViewController *viewControllerToPush = [MyViewController new];
viewControllerToPush.hidesBottomBarWhenPushed = YES;    viewControllerToPush.hidesBottomBarWhenPushed = YES;
float offset = self.tabBarController.tabBar.frame.size.height;  float offset = self.tabBarController.tabBar.frame.size.height;
self.view.frame = CGRectMake(0, -offset, self.view.frame.width, self.view.frame.height + offset);   self.view.frame = CGRectMake(0, -offset, self.view.frame.size.width, self.view.frame.size.height + offset);
于 2012-12-19T04:45:57.700 に答える
0

detailViewControllerのviewWillAppearでこれを行うと、正常に動作するはずです

于 2012-10-26T09:34:15.650 に答える
0

ナビゲーションコントローラーをサブクラス化するか、ナビゲーションバーを見つけてください

override func viewDidAppear(animated: Bool) {
    super.viewDidAppear(animated)
    let backdropEffectView = navigationBar.subviews[0].subviews[0].subviews[0] //_UIBackdropEffectView
    let visualEffectView: UIVisualEffectView = UIVisualEffectView(effect: UIBlurEffect(style: .Light))
    visualEffectView.frame = backdropEffectView.frame
    backdropEffectView.superview?.insertSubview(visualEffectView, aboveSubview: backdropEffectView)
    backdropEffectView.removeFromSuperview()
}
于 2015-08-02T21:31:23.623 に答える