ios7所有搜索视图和桌面视图关闭20像素

时间:2013-09-13 22:11:01

标签: ios iphone objective-c ios7

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

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

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

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

显然,这是一个黑客攻击。

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

enter image description here

IOS7 settings

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

4 个答案:

答案 0 :(得分:3)

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

[self setAutomaticallyAdjustsScrollViewInsets:NO];

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

这发生在我身上,看起来当UIScrollView或类似的子类在层次结构中第一个时,它会偏移20个像素(以防止它击中状态栏)。但是,即使有问题的视图远不到顶部,这仍然会发生。

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

答案 1 :(得分: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;

答案 2 :(得分:2)

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

答案 3 :(得分:0)

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

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

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

下拉视图以正确显示。