UINavigationViewController更改iOS7中滚动视图的行为

时间:2014-01-10 12:52:11

标签: objective-c uiscrollview uinavigationcontroller

我有一个'UIScrollView',它应该显示一个紧挨着另一个的图像列表。这是我用来添加每个图像的代码:

#define SCROLL_PADDING 10
#define SCROLL_DIMENSIONS 50

view.frame = CGRectMake(xValue, SCROLL_PADDING, SCROLL_DIMENSIONS, SCROLL_DIMENSIONS);
[scroller addSubview:view];

但是,如下图所示,图像加载了垂直偏移。经过一些研究后,我意识到这个偏移量与导航栏高度的高度相同。

With navigation controller

注1:默认情况下无法看到图像。我不得不向上滚动才能看到它们。

注2:我无法滚动,因为图片应该适合滚动视图。

我决定以模态方式呈现视图控制器,而不是将其推送到导航视图控制器的层次结构,一切都按预期工作。

Without navigation controller

此问题仅发生在iOS7中。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我遇到了这个article,它清楚地解释了iOS7上状态栏和导航栏的各种变化

正如您在上面两张图片中看到的那样,滚动视图的位置不会改变。在iOS6中,如果子视图的框架没有改变,它将向下移动以防止其覆盖导航栏。从iOS7开始,预计所有子视图不仅会影响导航栏,还会影响状态栏,这会使位置(0,0)位于SCREEN的左上角。

由于某种原因我还不明白(如果有人能解释的话会很好),只有滚动视图的子视图以与在iOS6中完成相同的方式向下移动。因此,使子视图显示在滚动视图的边界之外。

为了防止子视图重叠导航栏,有必要在视图控制器的生命周期中尽早将edgesForExtendedLayour设置为UIRectEdgeNone

viewController.edgesForExtendedLayout = UIRectEdgeNone;