как обрабатывать ориентацию строки состояния в ipad с ios 7 beta 6 с альбомной ориентацией слева

Я разработал свое приложение (поддерживает только альбомную ориентацию) в Xcode 4.0 и успешно обновился до каждой новой IOS, но с ios 7, поскольку мы знаем, что в строке состояния появилось новое изменение, что полоса пропускания в верхней части экрана, как показано на рисунке ниже

Изображение с полноэкранным представлением и строкой состояния поверх изображения в iOS 7

Но я решил это, изменив значение параметра viewcontrollerbasedstatusappearance как NO в plist, а также значение координаты 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-  х}, {20-ч, 1024-ш}}

Но если я снова поверну в альбомную левую сторону, строка состояния появится в верхней части экрана, а рамка строки состояния окажется внизу, как показано на рисунке ниже. Вы можете наблюдать черный вид внизу на рисунке ниже, на что я надеюсь. рамка окна строки состояния.

с рамкой строки состояния как {{748-y, 0-x}, {20-h, 1024-w}}

Поэтому, пожалуйста, дайте мне знать, как справиться с этим, чтобы как можно скорее поддерживать iOS 6 и 7. Заранее спасибо.


person Karthik Mitta    schedule 05.09.2013    source источник
comment
Было бы более уместно задать этот вопрос на форумах разработчиков Apple, так как iOS 7 SDK находится под соглашением о неразглашении.   -  person Steve Wilford    schedule 05.09.2013
comment
Спасибо, Стив, я тоже напишу там.   -  person Karthik Mitta    schedule 05.09.2013


Ответы (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
    }
}

Затем removeObserver в dealloc. Таким образом, вы всегда можете поддерживать фон строки состояния в соответствии с текущим внешним видом.

person czechboy    schedule 18.09.2013