8

問題は画像付きでわかりやすいです。ユーザーがビューを切り替えることができる UINavigationController があります。

最初のビューには、次のような検索バーとテーブル ビューが含まれています。ここに画像の説明を入力

2 つ目は、セルに関する情報が表示される基本的なビューです。

検索バーをクリックすると、ナビゲーション コントローラーが非表示になり、検索バーが上部に表示されます。

ここで、セルをクリックすると、2 番目のビューに移動しますが、ナビゲーション バーは最初に次のように非表示になります。

ここに画像の説明を入力

そして、自動的に次のように表示されます。

ここに画像の説明を入力

次のView Controllerを押す前にナビゲーションバーを表示するなど、いくつか試してみましたが、かなり醜いです.2番目のビューにナビゲーションバーを直接表示する方法を知っている人はいますか(連絡先アプリケーションのように)?

[更新] : コード

AppDelegate.m (navigationcontroller2 について話している)

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{    
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    FirstViewController *viewController1 = [[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil];
    SecondViewController *viewController2 = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];

    viewController1.managedObjectContext = [self managedObjectContext];
    viewController2.managedObjectContext = [self managedObjectContext];
    viewController1.viewController2 = viewController2;

    UINavigationController *navigationcontroller1 = [[UINavigationController alloc] initWithRootViewController:viewController1];
    [navigationcontroller1.navigationBar setTintColor:[UIColor lightGrayColor]];
    UINavigationController *navigationcontroller2 = [[UINavigationController alloc] initWithRootViewController:viewController2];
    [navigationcontroller2.navigationBar setTintColor:[UIColor lightGrayColor]];

    self.tabBarController = [[UITabBarController alloc] init];
    self.tabBarController.viewControllers = [NSArray arrayWithObjects:navigationcontroller1, navigationcontroller2, nil];

    self.window.rootViewController = self.tabBarController;
    [self.window makeKeyAndVisible];

    return YES;
}

FirstView.m

- (void) searchBarTextDidBeginEditing:(UISearchBar *)theSearchBar {
    [self.navigationController setNavigationBarHidden:YES animated:YES];
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (!noResultsToDisplay) {
        PinDetailsViewController *pinDetailsViewController = [[PinDetailsViewController alloc] initWithNibName:@"PinDetailsViewController" bundle:nil];
        NSManagedObject *managedObject = [fetchedResultsController objectAtIndexPath:indexPath];
        Pin *pin = (Pin *) managedObject;

        [self.navigationItem setTitle:@"Pins"];
        [self.navigationController pushViewController:pinDetailsViewController animated:YES];
        [pinDetailsViewController updateWithPin:pin];
    }
}

他に何か必要な場合は、お尋ねください。すべて揃っていると思います。

4

4 に答える 4

14

各ビューコントローラーでこのコードを使用してみてください。

- (void) viewWillAppear:(BOOL)animated
{

    [self.navigationController setNavigationBarHidden:NO animated:animated];

}


- (void) viewWillDisappear:(BOOL)animated
{
    [self.navigationController setNavigationBarHidden:YES animated:animated];

}
于 2012-05-05T21:59:54.177 に答える
1

新しいビュー コントローラーをプッシュする前に、ナビゲーション バーを再表示する必要があります。

[self.navigationController setNavigationBarHidden:NO animated:YES];

于 2012-05-02T00:03:30.920 に答える
1

ナビゲーションバーの位置にも同様の問題がありました。私はステータスバーの後ろに移動していました.navbarフレームを手動で設定することで問題を修正しました:

-(void)adjustNavBarOrigin
{
    CGRect r = self.navigationController.navigationBar.frame;
    r.origin = CGPointMake(0, 20);  // 20 is the height of the status bar
    self.navigationController.navigationBar.frame = r;   
}

viewWillAppear: や didRotateFromInterfaceOrientation: など、さまざまな場所でこのメソッドを呼び出さなければなりませんでしたが、うまくいきました :)

于 2012-05-04T09:45:16.383 に答える
0

UINavigationBarを非表示にすると、プロパティが乱れる場合があります。alphaの代わりにプロパティを使用してみてくださいhidden

于 2012-05-05T19:13:58.233 に答える