Stu*_*rtM 47 uinavigationbar uinavigationcontroller uistatusbar ios7
(如果需要编辑进行最终编辑,请参阅其他编辑,而不是编写过长的问题).
我有一个应用程序设置如下:
InitialViewController(子类ECSlidingViewController)
主导航控制器(子类UINavigationController)
主要家庭视图控制器(子类UIViewController)
在viewDidLoadinitialViewController中,我以主视图控制器为根加载主导航控制器.
self.topViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"MainNavVC"];
Run Code Online (Sandbox Code Playgroud)
在应用程序的第一次加载时,状态栏和导航栏是分开的.

这是期望的效果.
但是,然后我使用标准方法加载模态视图控制器并关闭它:
[self performSegueWithIdentifier:@"LoadSelectOpponentVC" sender:self];
Run Code Online (Sandbox Code Playgroud)
然后关闭:
[self dismissViewControllerAnimated:YES completion:nil];
Run Code Online (Sandbox Code Playgroud)
这反过来导致主导航控制器(保持主视图控制器)错误地显示状态栏并重叠:

View controller-based status bar appearanceedgesForExtendedLayout相关的无,但没有改变.我试图注销一些框架以查看问题发生的位置:
在第一次加载时:
主Nav VC - 查看框架 - {{0,0},{320,480}}
Main Nav VC - Nav Bar Frame - {{0, 0}, {320, 44}}
Initial VC - View Frame - {{0, 0}, {320, 480}}
Home VC - View Frame - {{0, 0}, {320, 480}} -- viewDidLoad Home VC
Home VC - View Frame - {{0, 64}, {320, 416}} -- viewWillAppear Home VC
--- After Modal is opened/closed ----
Home VC - View Frame - {{0, 64}, {320, 416}} -- viewWillAppear Home VC
Main Nav VC - View Frame - {{0, 0}, {320, 480}} -- viewWillAppear Main Nav
Main Nav VC - Nav Bar Frame - {{0, 20}, {320, 44}} -- viewWillAppear Main Nav
Home VC - View Frame - {{0, 44}, {320, 436}} -- viewDidAppear Home VC
Run Code Online (Sandbox Code Playgroud)
Nic*_*uet 39
您是否尝试过Apple关于"防止状态栏覆盖您的观点"的建议:https://developer.apple.com/library/content/qa/qa1797/_index.html
您是否看过"UIBarPositioningDelegate":https://developer.apple.com/documentation/uikit/uibarpositioningdelegate
Sun*_*aru 26
在iOS 7.0中UIViewController默认以这种方式工作.如果您在内部使用UIViewController UINavigationController并且navigationBar可见,则视图将全屏显示.
如果navigationBar可见,请执行以下操作.==>
self.edgesForExtendedLayout = UIRectEdgeNone
Run Code Online (Sandbox Code Playgroud)
如果hiddenBar被隐藏,请执行以下操作.==>
UIView通过移动20个点来调整所有元素
如果使用"界面"构建器,则可以使用iOS6/7增量:首先,"查看为iOS 6.0",然后设置增量"20"以在iOS 7中实现+20偏移
jbc*_*man 18
我很惊讶没有人找到正确的答案.UIBarPositioningDelegate就像一个魅力!只需将您的视图控制器设置为UIBarPositioningDelegate并将其指定为栏的委托.将条形图从视图顶部放置20个像素.然后将此方法添加到视图控制器(仅适用于iOS7 +):
- (UIBarPosition)positionForBar:(id<UIBarPositioning>)bar
{
return UIBarPositionTopAttached;
}
Run Code Online (Sandbox Code Playgroud)
我在类似问题的回答中详细回答了这个问题。简短的回答是:没有办法获得您在 iOS 6 及更早版本中习惯的自动状态栏布局行为。您必须围绕它进行设计,或者找到一种模拟旧样式的方法(我介绍了这两种方法)。
我强烈建议您不要对导航栏框架进行手动调整。让 UINavigationController 自己处理。最有可能的是,您的问题是导航控制器的视图框架不等于 UIScreen 的边界。
| 归档时间: |
|
| 查看次数: |
64156 次 |
| 最近记录: |