4

奇妙な問題: アプリを縦向きに回転させ、ツールバー項目を選択して uipopovercontroller を公開した後、横向きに戻すと、右側の UINavigationController (SplitView の objectAtIndex:0) がナビゲーション バーの色を変更します。理由はわかりません。Interface Builder で barStyle = UIBarStyleBlackOpaque; に設定しました。

ランドスケープモードに戻るとシルバーになります。

これは、ポートレートに回転し、ポップオーバーを作成し、別の tableViewController をプッシュするナビゲーション コントローラーで何かを選択した場合にのみ発生します。viewDidLoad メソッドでプロパティを設定しても何もしません。

誰にもアイデアがありますか?

4

9 に答える 9

7

viewDidLoad は、ビューが最初に表示されたとき (またはメモリの問題のためにクリアされたとき) にのみ呼び出されます。viewWillAppear または splitViewController:willShowViewController:invalidatingBarButtonItem: で barStyle を再設定してみてください。

于 2010-04-15T00:00:26.520 に答える
2

@Brendan G. Lim と他の人が tintColor に問題を抱えていて、最終的にカスタム ナビゲーション バーで動作するようになりました。

  1. UINavigationBar からサブクラス化されたカスタム ナビゲーション ファイルを作成する
@interface CustomNavigationBar : UINavigationBar 
{
}

@end
  1. 実装ファイルで、setTintColor メソッドをオーバーライドします。
@implementation CustomNavigationBar

-(void)setTintColor:(UIColor *)tintColor
{
  [super setTintColor :[self tintColor]];
}

@end
  1. MainWindow.xib を開き、色を設定するナビゲーション バーを選択します。ID ペイン [Apple][4] で、CustomNavigationBar をクラスとして選択します。

  2. 属性ペインで [Apple][1] バーの色を設定します。

それでおしまい!

于 2010-12-08T17:58:29.677 に答える
2

Steve の場合 (RootViewControll の PoPView または splitView navigationBar を検出) [splitview IPAD]

これらのメソッドで、detailviewcontroller から呼び出される RootViewController にクラス メソッド (setLand:int i) を作成する必要があります。

- (void)splitViewController: (UISplitViewController*)svc willShowViewController:(UIViewController *)aViewController invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem {
    // LANDSCAPE !!!!
    [RootViewController setLand:1];

- (void)splitViewController: (UISplitViewController*)svc willHideViewController:(UIViewController *)aViewController withBarButtonItem:(UIBarButtonItem*)barButtonItem forPopoverController: (UIPopoverController*)pc {
    // PORTRAIT!!
    [RootViewController setLand:0];

および RootViewController で:

    static int landscape=2;

    ...

// SetMethod for class variable landscape   
        + (void)setLand:(int)i 
        {
            if(landscape!=i){
                landscape = i;

            }
        }

最後に常に RootViewController に

 - (void)viewWillAppear:(BOOL)animated {
     [super viewWillAppear:animated];
     if(landscape == 1)
     {
       //LANDSCAPE!
       CUSTOM FOR LANDSCAPE
       self.navigationController.navigationBar.barStyle =...
     }
     else if(landscape == 0)
     {
       //PORTRAIT!
       CUSTOM FOR PORTRAIT
       self.navigationController.navigationBar.barStyle =...
     }
   }

..これは私のアプリでうまく機能し、カスタムの横向き/縦向きナビゲーションバーを編集します

于 2010-11-29T00:18:08.173 に答える
2

4.2 に問題があり、回転後に navigationBar の tintColor を設定しているようです。上記の回答を使用して barStyle を正しく設定できますが、tintColor は設定できません。他に同じ問題を抱えている人はいますか?

于 2010-11-29T19:33:14.860 に答える
1

この数週間前にバグ レポートを提出し、Apple はこれが 4.2 の既知のバグであると述べました。その後、これを修正する方法があるかどうか尋ねましたが、今のところ返信はありません。

UINavigationbar をサブクラス化/カスタマイズされたナビゲーション バーに置き換えても意味がありません。ポップオーバーは、UINavigatioBar でいくつかの秘密の厄介なことを実行しているようで、tintColor を強制終了し、リセットできません (リセットした後でも、常に「nil」のままになります)。

私は基本的にあきらめて、次のアップデートがリリースされるまで (できれば) 我慢しなければならないと顧客に伝えました。

于 2011-01-04T12:37:14.400 に答える
1

私はこれと同じ問題を抱えていますが、viewWillAppear で barStyle をリセットすると別の問題が発生します。そこに設定すると、ポップオーバーに表示されるときにも設定されるため、ポップオーバーの色と一致しなくなります。分割ビュー コントローラーの左側のペインに表示されている場合にのみ、barStyle を希望するものに設定するにはどうすればよいですか? 向きが横の場合にのみ表示されるように設定できたと思いますが、それは汚れているようです。また、 splitViewController:willShowViewController:invalidatingBarButtonItem: で設定してもまったく機能しません。これは、分割ビュー コントローラーがスタイルをデフォルトに戻す前に呼び出されると思われるためです。これは、アップル側の非常にばかげたバグのようです。デフォルトのスタイルではなく、元のスタイルに戻す必要があります。

于 2010-11-05T15:40:35.903 に答える
1

クール、修正しました。

splitviewcontroller とナビゲーション バーが宣言されている RootViewController に追加されました。

- (void)viewWillAppear:(BOOL)animated {

    [super viewWillAppear:YES];


    self.navigationController.navigationBar.barStyle = UIBarStyleBlackOpaque;

}
于 2010-06-28T00:44:19.393 に答える
1

この問題は、次のコードを使用して修正されました

@implementation ChangeNavigationBarColor

- (void) setTintColor:(UIColor*)color
{
    [super setTintColor:[[BrandingManager sharedBrandingManager] tintColorForNavigationController]];
}


@interface ChangeNavigationBarColor : UINavigationBar {

}

@end
于 2010-12-07T10:49:46.060 に答える
0

色を変更するために別のクラスを使用し、背景色をそのクラス、目的の色にしてから、そのクラスを rootViewController のクラスとして使用できます。私はやった、それは動作します。

于 2011-09-14T10:07:59.320 に答える