5

编辑:这不是框架的问题。框架在正确的位置。这是关闭的内容。是的,我们正在补偿清除状态栏。ViewDidLoad 显示内容偏移量为 0,0。

在具有滚动视图的应用程序的每个页面上,它的内容都被下推 20 像素。我认为这可能与新的 StatusBar 或缺少它有关。该错误似乎也出现在模拟器设置菜单中。截图如下。这似乎只影响添加到 ViewController 的第一个滚动视图,并且只有在没有其他视图添加到它的情况下。表视图也受到影响,因为它们继承自 Scroll 视图。需要明确的是,滚动视图从正确的原点开始,但内容被下推 20 像素。这很奇怪,因为我认为如果这是一个状态栏问题,它会高于而不是低于 20 像素。

目前我们正在通过将其添加到我们的基本视图控制器来修复它

UIView *hackView = [[UIView alloc] init];
hackView.frame = CGRectMake(0, 0, 0, 0);
[self.view addSubview:hackView];

显然,这是一个 hack。

在为最新的 IOS7 构建时,即使使用 IOS7 的黄金会员版本,手机和模拟器也会发生同样的事情。您甚至可以在模拟器的设置表视图中以及下面的我们的设置中看到错误示例。

在此处输入图像描述

IOS7设置

这是加载后立即显示的屏幕截图。我们注意到的一件奇怪的事情是,当我们执行拉动刷新时,它会更正滚动视图并停留在正确的位置。或者,如果我们进行补偿,它在开始时看起来是正确的,但是任何后续的刷新都会将滚动视图迁移到 -20px

4

4 回答 4

3

我将此添加到viewDidLoad:受影响的 UIViewControllers 中,它为我解决了这个问题:

NSComparisonResult order = [[UIDevice currentDevice].systemVersion compare: @"7.0" options: NSNumericSearch];
if (order == NSOrderedSame || order == NSOrderedDescending)
{
    // OS version >= 7.0
    self.edgesForExtendedLayout = UIRectEdgeNone;
}

另一种更清洁的方法:

if ([self respondsToSelector:@selector(edgesForExtendedLayout)])
    self.edgesForExtendedLayout = UIRectEdgeNone;
于 2013-09-27T18:08:05.530 回答
3

在 Xcode 中进一步测试后,我原来的解决方法仍然有效,但真正的罪魁祸首似乎是导航控制器与视图控制器上的 Adjust Scroll View Insets 标志相结合。禁用它解决了这个问题。

[self setAutomaticallyAdjustsScrollViewInsets:NO];

原始解决方法:尝试重新排序视图层次结构或在顶部添加一个空视图。

这发生在我身上,似乎当 UIScrollView 或类似的子类在层次结构中首先出现时,它会偏移 20 个像素(以防止它碰到状态栏)。然而,即使有问题的视图远不靠近顶部,这种情况仍然会发生。

这在 Interface Builder 中是可重现的,对我来说一个简单的解决方法是重新排序我的视图,以便标签或按钮首先位于视图控制器的视图下。如果在您的情况下这是不可能的,那么在您的滚动视图上方添加一个空视图(甚至在屏幕外)似乎也可以解决问题。

于 2013-09-27T17:58:43.630 回答
2

你是如何表达你的观点的?使用自动布局,您可以使用topLayoutGuide,它应该适应这些偏移量。

于 2013-09-13T22:14:57.623 回答
0

在 Ios 7 中,视图从 y=0 的窗口开始,将视图移动到 20 像素 downm

self.view.frame = CGRectmake (0,20,320,hight);

这是由于 iOS 7 中的透明状态栏。

下拉视图以正确显示它。

于 2013-09-13T22:16:59.093 回答