3

Xcode 4.0 でアプリケーション (ランドスケープ サポートのみ) を開発し、すべての新しい IOS へのアップグレードに成功しましたが、iOS 7 では、下の画像に示すように、ステータスバーがビューの上にあるトランスラント バーという新しい変更を行っていることがわかっています。

iOS 7 の全画面表示とステータスバーをその上に表示した画像

しかし、viewcontrollerbasedstatusappearance パラメータ値を plist で NO に変更し、ウィンドウの原点 x 座標値を 20 ピクセルに変更することで解決しました (x 座標が強制的に横向きで起動する理由)。下の写真に示され、コードはここにあります

 -(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions{

    self.window = [[[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds] autorelease];
    if (DEVICE_IS_IPHONE || DEVICE_IS_IPHONE5)
    {
        [UIApplication sharedApplication].statusBarHidden=YES;
    }
    else if(DEVICE_IS_IPAD)
    {
        [UIApplication sharedApplication].statusBarHidden=NO;
        if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7) {

            [application setStatusBarStyle:UIStatusBarStyleLightContent];
            self.window.clipsToBounds=YES;
            self.window.frame=CGRectMake(self.window.frame.origin.x+20, self.window.frame.origin.y, self.window.frame.size.width-20, self.window.frame.size.height);
        }
    }
    mLoginController = [[LoginViewController alloc]init];
    mNavigationController = [[UINavigationController alloc ] initWithRootViewController:mLoginController];
    self.window.rootViewController = mNavigationController;
    [self.window addSubview:[mNavigationController view]];
    [self.window makeKeyAndVisible];
    [mLoginController release];
    return YES;
}

また、以下に示すビューのloginviewcontrollerでは、loadviewメソッドを使用して以下のようにコントローラービューをオーバーライドしています。参考までに、同じ問題が発生しているにもかかわらず、viewdidloadを直接使用するように変更しました。

-(void)loadView{    
    CGSize theSize = CGSizeMake(1, 1);
    CGRect theFrameRect = [UtilityMethods getAbsoluteFrameForSize:theSize];//i will get the exact    
    screen size based on device
    UIView *theLoginView = [[UIView alloc]initWithFrame:CGRectMake(0, 40, theFrameRect.size.width,   
    theFrameRect.size.height)];
    self.view = theLoginView;
    self.view.autoresizingMask = UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleTopMargin;
    self.view.backgroundColor = [UIColor blackColor];
}

解決後のios 6のような通常のビューの画像とステータスバーのフレーム値は{{0-y、0-x}、{20-h、1024-w}}のようになります

しかし、横向きに再び回転すると、ステータスバーがビューの上に来て、下の写真に示すようにステータスバーのフレームが下に座っています。ステータスバーのウィンドウ枠。

ステータス バー フレームを {{748-y, 0-x}, {20-h, 1024-w}} とする

そのため、できるだけ早く iOS 6 と 7 の両方をサポートするために、これを処理する方法を教えてください。事前に感謝します。

4

1 に答える 1

1

UIViewControllerのビューにオブザーバーをアタッチしますbounds:

- (void) viewDidLoad
{
    [super viewDidLoad];
    [self.view addObserver:self forKeyPath:@"bounds" options:NSKeyValueObservingOptionNew context:NULL];
}

- (void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
    if (object == self.view && [keyPath isEqualToString:@"bounds"]) {
        //redraw your status bar background
    }
}

removeObserverdealloc。_ このようにして、ステータス バーの背景を常に最新の状態に保つことができます。

于 2013-09-18T10:12:06.983 に答える