导航栏位置为模态视图 – iOS7
在导航控制器中,您可以按照预期自动获取导航栏的正确颜色和位置。
喜欢这个
但是在模态视图中,当您在导航栏中拖动时,您可以将其放置在顶部,这太靠近运营商/电池信息。
所以你可以把它拖下来,猜测它与自动创build的位置相匹配的程度,但是你有一个颜色差异。 我已经尝试在IB中更改状态栏设置,没有什么区别。
有没有一个正确的方法来克服这一点,如使模式视图看起来像自动生成的导航视图。
谢谢
在iOS 7中克服这个问题的最好方法是遵循新的UIBarPositioningDelegate
协议。
您可以将NavigationBar的代理连接到视图控制器(通过故事板或代码将视图控制器设置为导航栏的代理),并遵循该协议并通过实现方法
-(UIBarPosition)positionForBar:(id<UIBarPositioning>)bar { return UIBarPositionTopAttached; }
您可以删除视图控制器中的顶部间隙。 您需要将条放置在顶边下方20个点
找出解决这个问题的3个选项。
选项1:调整导航栏的大小
float currentVersion = 7.0; if ([[[UIDevice currentDevice] systemVersion] floatValue] >= currentVersion) { // iOS 7 self.navBar.frame = CGRectMake(self.navBar.frame.origin.x, self.navBar.frame.origin.y, self.navBar.frame.size.width, 64); }
选项2:隐藏状态栏
例如,在要隐藏状态栏的模式视图中
添加这个方法
- (BOOL)prefersStatusBarHidden { return YES; }
在viewDidLoad中添加
float currentVersion = 7.0; if ([[[UIDevice currentDevice] systemVersion] floatValue] >= currentVersion) { [self prefersStatusBarHidden]; [self performSelector:@selector(setNeedsStatusBarAppearanceUpdate)]; } else { [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationSlide]; }
现在,当你消除模态视图,并且你想要你的状态栏回来。 添加这个viewWillAppear
float currentVersion = 7.0; if ([[[UIDevice currentDevice] systemVersion] floatValue] >= currentVersion) { [self prefersStatusBarHidden]; [self performSelector:@selector(setNeedsStatusBarAppearanceUpdate)]; NSLog(@"ios7"); } else { [[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationSlide]; }
这个,但是这次回来
- (BOOL)prefersStatusBarHidden { return NO; }
选项3:embedded导航控制器
select你的模态视图,只需将其embedded到导航控制器中即可。
在Swift中 :
在iOS 8.1和Swift中解决这个问题的最好方法就是符合新的UIBarPositioningDelegate协议。
您将NavigationBar的委托连接到您的视图控制器,并符合该协议,并通过调用该方法:
func positionForBar(bar: UIBarPositioning) -> UIBarPosition { return UIBarPosition.TopAttached }
您可以删除视图控制器中的顶部间隙。 您需要将条放置在顶边下方20个点。
对于Swift3使用以下..
func position(for bar: UIBarPositioning) -> UIBarPosition{ return .topAttached; }
经过几次尝试在iOS 7中移动导航栏几个像素,这是最终为我工作的:
-(void)viewWillLayoutSubviews { float iosVersion = 7.0; if ([[[UIDevice currentDevice] systemVersion] floatValue] >= iosVersion) { // iOS 7+ CGRect viewFrame = self.view.frame; viewFrame.origin.y += 10; self.view.frame = viewFrame; } }
我也调整了状态栏颜色以更好地匹配我的内容:
-(UIStatusBarStyle)preferredStatusBarStyle{ return UIStatusBarStyleLightContent; }
我创build了一个导航控制器,删除了与它一起出现的“根视图控制器”。 然后按住Ctrl键并拖动视图上的“导航控制器”(删除您之前手动添加的导航栏)。 将导航控制器设置为“初始视图控制器”,现在它适用于我。
我把“使用Autolayout”closures,它为我工作。