2012-05-25 41 views
0

我在隐藏状态栏时遇到了UIViewController主视图的位置问题。我调用该调用来隐藏状态栏,但即使尝试以编程方式重新定位框架,视图也不会转换为占用状态栏留下的空间。隐藏状态栏后无法重新定位UIView

下面是该视图的屏幕截图,边框以蓝色边框为边界。尽管我尽了最大的努力,但似乎无法将它翻译成占据状态栏的空间。但是,我注意到,在旋转手机时,它完全占用了空间,但我不知道在最初进入视图时要调用什么来实现此功能。任何想法如何重新定位视图?

enter image description here

我隐藏状态栏,并尝试用下面的代码重新定位的观点:

[self setWantsFullScreenLayout:YES]; 
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone]; 

CGRect translatedFrame = self.view.frame; 
translatedFrame.origin.y -=20; 
self.view.frame = translatedFrame; 

[self.view.layer setBorderColor:[UIColor blueColor].CGColor]; 
[self.view.layer setBorderWidth:1.0f]; 
+0

你如何尝试:self.view.frame = CGRectMake(0,0,frameWidth,frameHeight),看看它是否工作。 –

+0

您希望我设置哪个框架宽度和高度?我尝试过: self.view.frame = CGRectMake(0,0,self.view.frame.size.width,self.view.frame.size.height); – Christian

+0

只需添加两个NSLog以在更改之前和之后显示[self.view.frame description]。 –

回答

0

我的问题缩小到我使用的是库(观景台)进行处理。我想,每个人的建议都适用于正常情况,但鉴于View Deck使用视图控制器创建了一个容器,因此我认为它不能正确渲染。

+0

View Deck的最终解决方案是什么? – danimal

+1

@danimal:我认为问题是父视图DeckController(容器)仍然在尊重状态栏的边界。试试这个: ' - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationFade]; self.viewDeckController.view.frame = [[UIScreen mainScreen] applicationFrame]; [self.viewDeckController.view setNeedsDisplay]; }' – Christian

0

您需要添加此行调整你的看法。

[self setWantsFullScreenLayout:YES]; 
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone]; 

CGRect translatedFrame = self.view.frame; 
translatedFrame.origin.y -=20; 
translatedFrame.size.height += 20; // Add 20px 
self.view.frame = translatedFrame; 

[self.view.layer setBorderColor:[UIColor blueColor].CGColor]; 
[self.view.layer setBorderWidth:1.0f]; 
+0

我的观点最初是480px,因为我之前在IB中设置了高度。不过,我仍然添加了代码,以查看调整高度是否会触发翻译,但它只是保持在同一位置,尽管高度现在增大了20px。 – Christian

+1

试试这个:'UIWindow * window = [[[UIApplication sharedApplication] windows] objectAtIndex:0];' 'self.view.frame = window.screen.bounds;' –

1

何时何地隐藏状态栏?根据我的经验,这是唯一的正确,如果代码放置在viewWillAppear:

- (void)viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 
    [[UIApplication sharedApplication] setStatusBarHidden:YES]; 
} 
+0

谢谢,虽然这不是问题,但我认为你是正确的,这是它应该是 - 我以前在viewDidLoad它。 – Christian