как да се справя с ориентацията на лентата на състоянието в ipad с ios 7 beta 6 с пейзажна лява ориентация

Разработих моето приложение (поддръжка само на пейзаж) в Xcode 4.0 и успешно надстроих до всеки нов IOS, но с ios 7, тъй като знаем, че лентата на състоянието има нова промяна, тази трансулираща лента в горната част на изгледа, както е показано на изображението по-долу

Изображение с изглед на цял екран и лента на състоянието отгоре в ios 7

Но аз реших това, като промених стойността на параметъра viewcontrollerbasedstatusappearance като NO в plist и също vlaue на източника на прозореца 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 възможно най-скоро. Благодаря предварително.


person Karthik Mitta    schedule 05.09.2013    source източник
comment
Би било по-подходящо да попитате това във форумите на Apple Dev, тъй като iOS 7 SDK е под NDA.   -  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