0

少し問題が発生しています。UINavigationControllerバーを使用してアプリを開発しようとしていますが、tableViewは回転していますが、回転していません。ちょっとした紹介で、私のアプリケーションが今何であるかがわかります。IBで作成され、クラスViewController.hでリンクされているUITableViewと、appDelegate.hで作成されたUINavigationControllerがあります。tableView内のすべてのアイテムをクリックすると、別のviewControllerにスライドしますが、この部分は今のところ重要ではありません。今のところ、メインビューで回転をサポートしようとしています。

AppDelegate.hに次のようにUINavigationControllerを作成します。

@interface AppDelegate : UIResponder <UIApplicationDelegate>
{
    UINavigationController *navigation;
}
@property (strong, nonatomic) UIWindow *window;
@property (strong, nonatomic) UIViewController *viewController;

そして、AppDelegate.mでこれを行います:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    self.viewController = [[ViewController alloc] initWithNibName:@"MainViewController" bundle:nil];
    self.window.rootViewController = self.viewController;
    [self.window makeKeyAndVisible];
    [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];

    return YES;
}

- (void)applicationDidBecomeActive:(UIApplication *)application
{
    ViewController *viewController = [[ViewController alloc] init]; 
    viewController.title = @"Agrinuvo";
    [navigation pushViewController:viewController animated:NO];
    navigation = [[UINavigationController alloc] initWithRootViewController:viewController];
    navigation.navigationBar.tintColor = [UIColor darkGrayColor];
    [[UIBarButtonItem appearance] setTintColor:[UIColor orangeColor]];

    [_window addSubview:navigation.view];
}

私はViewController.mviewDidLoadメソッドでこれらを試しました:

self.navigationController.navigationBar.autoresizesSubviews = YES;
self.navigationController.navigationBar.autoresizingMask =  UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin;

UINavigationBarのサイズを変更することはできますが、一生の間回転させることはできません(ViewController.mのままです):

-(void) orientationChanged
{
CGRect frame = self.navigationController.navigationBar.frame;
if ([[UIDevice currentDevice] orientation] == UIDeviceOrientationPortrait)
{
    self.view.transform = CGAffineTransformMakeRotation(0);
    frame.size.height = 44;
    frame.origin.y = 15;
}
if([[UIDevice currentDevice] orientation] == UIDeviceOrientationPortraitUpsideDown)
{
    self.view.transform = CGAffineTransformMakeRotation(M_PI * 1);
    frame.size.height = 44;
}
if([[UIDevice currentDevice] orientation] == UIDeviceOrientationLandscapeRight)
{
    self.view.transform = CGAffineTransformMakeRotation(M_PI * -0.5);
    frame.size.height = 32;
}
if([[UIDevice currentDevice] orientation] == UIDeviceOrientationLandscapeLeft)
{
    self.view.transform = CGAffineTransformMakeRotation(M_PI * 0.5);
    frame.size.height = 32; 
}
self.navigationController.navigationBar.frame = frame;
}

はい、すべてのコントローラーでこのメソッドを試しましたが、すべてのコントローラーでYESが返されますが、NavigationBarは回転しません。

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

ですから、NavigationBarを実際に回転させることは可能かどうか疑問に思います。また、作成するように作成しますか?この方法でUINavigationControllerを開始する必要がありますか、それともIBで作成して.hクラスにリンクする必要がありますか?

長い間読んで申し訳ありません、そしてあなたが提供できるどんな助けにも感謝します

4

1 に答える 1

1

ナビゲーションコントローラーをウィンドウのルートビューコントローラーにする必要があります。また、applicationDidBecomeActive:methodには、次の行があります。[navigation pushViewController:viewControllerアニメーション:NO]; これは、ナビゲーションをインスタンス化する前に使用するため、その行は何もしません。

于 2012-09-05T15:39:57.410 に答える