Dog*_*fee 39 position modal-dialog view navigationbar ios7
在导航控制器中,您可以按预期自动获得导航栏的正确颜色和位置.
像这样

但在模态视图中,当您在导航栏中拖动时,您可以将其放置在顶部,这太靠近载体/电池信息.

所以你可以将它向下拖动,猜测它与自动创建的位置匹配的距离,但是你有一个颜色差异.我试过更改IB中的状态栏设置,没有什么区别.

是否有正确的方法来克服这个问题,例如使模态视图看起来像自动生成的导航视图.
谢谢
Mat*_*att 82
在iOS 7中克服这个问题的最佳方法是遵循新UIBarPositioningDelegate协议.
将NavigationBar的委托连接到视图控制器(通过故事板或代码将视图控制器设置为导航栏的委托)并遵循该协议并实现方法
-(UIBarPosition)positionForBar:(id<UIBarPositioning>)bar { return UIBarPositionTopAttached; }
您可以删除视图控制器中的顶部间隙.您需要将条形放置在顶部边缘下方20个点
Dog*_*fee 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);
}
Run Code Online (Sandbox Code Playgroud)
选项2:隐藏状态栏
例如,在要隐藏状态栏的模态视图中
添加此方法
- (BOOL)prefersStatusBarHidden
{
return YES;
}
Run Code Online (Sandbox Code Playgroud)
在viewDidLoad中添加
float currentVersion = 7.0;
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= currentVersion) {
[self prefersStatusBarHidden];
[self performSelector:@selector(setNeedsStatusBarAppearanceUpdate)];
}
else {
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationSlide];
}
Run Code Online (Sandbox Code Playgroud)
现在,当您关闭模态视图时,您希望恢复状态栏.在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];
}
Run Code Online (Sandbox Code Playgroud)
这个,但这次没有回复
- (BOOL)prefersStatusBarHidden
{
return NO;
}
Run Code Online (Sandbox Code Playgroud)
选项3:嵌入导航控制器
选择您的模态视图,只需将其嵌入导航控制器中即可.

在Swift中:
在iOS 8.1和Swift中克服这个问题的最佳方法是遵循新的UIBarPositioningDelegate协议.
您将NavigationBar的委托连接到视图控制器并符合该协议并调用方法:
func positionForBar(bar: UIBarPositioning) -> UIBarPosition {
return UIBarPosition.TopAttached
}
Run Code Online (Sandbox Code Playgroud)
您可以删除视图控制器中的顶部间隙.您需要将条形放置在顶部边缘下方20个点.