我最近下载了Xcode 5 DP来测试我在iOS 7中的应用程序.我注意到并确认的第一件事是我的视图边界并不总是调整大小来考虑状态栏和导航栏.
在viewDidLayoutSubviews,我打印视图的边界:
{{0,0},{320,568}}
这导致我的内容出现在导航栏和状态栏下方.
我知道我可以通过获取主屏幕的高度,减去状态栏的高度和导航栏的高度来解释自己的高度,但这似乎是不必要的额外工作.
我该如何解决这个问题?
更新:
我找到了解决这个特定问题的方法.将导航栏的半透明属性设置为NO:
self.navigationController.navigationBar.translucent = NO;
Run Code Online (Sandbox Code Playgroud)
这将修复视图在导航栏和状态栏下面的框架.
但是,当您希望导航栏为半透明时,我还没有找到解决此案例的方法.例如,在全屏查看照片时,我希望导航栏是半透明的,并且要在其下方构建视图.这是有效的,但当我切换显示/隐藏导航栏时,我经历了甚至更奇怪的结果.第一个子视图(UIScrollView)每次都会更改其边界.
在iOS 7 UIStatusBar中,它的设计方式与视图合并如下:
(由TinaTavčar设计的GUI )
这很酷,但是当你在视图的顶部有一些东西时它会使你的视图陷入混乱,并且它会与状态栏重叠.
是否有一个简单的解决方案(例如在info.plist中设置属性)可以改变它的工作方式[不重叠]回到它在iOS6中的状态?
我知道一个更直接的解决方案是self.view.center.x为每个视图控制器提供+ 20个点,但是更改它们会使其他尺寸self.view.center.x变得更大(有不同可能导致自定义segue等问题)并且突然变成一个单调乏味的工作最好避免.
如果有人能为我提供单线解决方案,我真的很高兴.
PS我知道我可以通过做某事来隐藏状态栏
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];
Run Code Online (Sandbox Code Playgroud)
在didFinishLaunchingWithOptions方法中,但这是一个解决方法,一个避免问题的捷径,所以我不认为这是一个真正的解决方案.
我的应用程序的第一个屏幕是UITableViewController没有导航栏,这意味着内容在状态栏下流动,因此存在大量文本冲突.我已经调整了两个属性Under top bars,Adjust scroll view insets哪些实际上阻止了它滚动,但代价是保持表视图的顶部.我试图将UITableView帧设置为偏移20像素,但它似乎没有生效,因为我目前需要该应用程序与iOS 6兼容我无法跳转到iOS 7 Storyboards强制自动布局使用顶部高度指南.有没有人找到适用于这两个版本的解决方案?
事情我已经尝试:设置edgesForExtendedLayout,故事情节中更改设置Under top bars和Adjust scroll view,迫使帧到一个新的领域.
一张图片胜过千言万语:

iOS 6看起来......

同样的方式我想在iOS 7中显示状态栏
看到这个

但我的实际输出(重叠)
我试过跟随逻辑
open your info.plist and set "View controller-based status bar appearance" = NO
Run Code Online (Sandbox Code Playgroud)
它在我的代码中不起作用,,,
我正在尝试在 iPad 上实现一些自定义转换,但我遇到了一些问题。由于X,Y坐标不总是在左上角开始containerView的transitionContext,当设备旋转我写了下面的方法
- (CGRect)rectForPresentedStateStart:(id<UIViewControllerContextTransitioning>)transitionContext
{
UIViewController *fromViewController = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey];
UIView *containerView = [transitionContext containerView];
switch (fromViewController.interfaceOrientation)
{
case UIInterfaceOrientationLandscapeRight:
return CGRectMake(0, containerView.bounds.size.height,
containerView.bounds.size.width, containerView.bounds.size.height * 2 / 3);
case UIInterfaceOrientationLandscapeLeft:
return CGRectMake(0, - containerView.bounds.size.height * 2 / 3,
containerView.bounds.size.height, containerView.bounds.size.height * 2 / 3);
case UIInterfaceOrientationPortraitUpsideDown:
return CGRectMake(- containerView.bounds.size.width * 2 / 3, 0,
containerView.bounds.size.width * 2 / 3, containerView.bounds.size.height);
case UIInterfaceOrientationPortrait:
return CGRectMake(containerView.bounds.size.width, 0,
containerView.bounds.size.width * 2 / 3, containerView.bounds.size.height);
default:
return CGRectZero; …Run Code Online (Sandbox Code Playgroud)