在导航控制器中,您可以按预期自动获得导航栏的正确颜色和位置。
像这样
但是在模态视图中,当你在导航栏中拖动时,你可以将它放在顶部,这太靠近载体/电池信息了。
所以你可以将它向下拖动,猜测它与自动创建的位置匹配的距离,但是你有一个颜色差异。我试过更改IB中的状态栏设置,没有什么区别。
是否有正确的方法可以解决这个问题,例如使模态视图看起来像自动生成的导航视图。
由于
答案 0 :(得分:81)
在iOS 7中克服此问题的最佳方法是遵循新的UIBarPositioningDelegate
协议。
将NavigationBar的委托连接到视图控制器(通过故事板或代码将视图控制器设置为导航栏的委托)并遵循该协议并实施方法
-(UIBarPosition)positionForBar:(id<UIBarPositioning>)bar { return UIBarPositionTopAttached; }
您可以删除视图控制器中的顶部间隙。您需要将条形放置在顶部边缘下方20个点
答案 1 :(得分:27)
找出解决此问题的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:嵌入导航控制器
选择您的模态视图,只需将其嵌入导航控制器中即可。
答案 2 :(得分:5)
在 Swift :
在iOS 8.1和Swift中克服这个问题的最佳方法是遵循新的UIBarPositioningDelegate协议。
您将NavigationBar的委托连接到视图控制器并符合该协议并调用方法:
func positionForBar(bar: UIBarPositioning) -> UIBarPosition {
return UIBarPosition.TopAttached
}
您可以删除视图控制器中的顶部间隙。您需要将条形放置在顶部边缘下方20个点。
答案 3 :(得分:2)
对于Swift3使用以下..
func position(for bar: UIBarPositioning) -> UIBarPosition{
return .topAttached;
}
答案 4 :(得分:0)
在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;
}
答案 5 :(得分:0)
我创建了一个导航控制器,删除了&#34; Root View Controller&#34;与它一起出现。 然后按住ctrl并拖动&#34;导航控制器&#34;在您的视图上(删除之前手动添加的导航栏)。 将导航控制器设置为&#34;初始视图控制器&#34;它现在对我来说很好。
答案 6 :(得分:0)
isTranslucent
默认设置为true
。将其设置为false
将使导航栏扩展到状态栏下方。
navigationBar.isTranslucent = false
答案 7 :(得分:-6)
我关闭了“使用Autolayout”,它对我有用。