模态视图控制器关闭后,UIScrollView的内容发生了偏移。

4
我有一个分页滚动视图。每个页面都有一个视图控制器(buttonViewController),管理一组按钮的网格。如果您按下其中一个按钮,buttonViewController会以模态方式弹出另一个视图控制器(detailViewController)。
问题是,当我关闭模态视图控制器时,可见的buttonViewController会向下移动大约20像素。奇怪的是,只有可见页面会被移动。如果我滚动到已加载的另一页,则仍处于正确的位置。
我的问题基本上与 dismissing modalViewController moves main view buttons around iphone相同。
但是,该问题的接受答案假定状态栏已隐藏。我没有在我的应用程序中隐藏状态栏。
还有其他想法吗?
还要注意:移位仅在第一次启动模态视图控制器时发生。如果我不断打开和关闭模态视图控制器,一切都保持不变。
再注意一点:如果我添加以下代码:
    CGRect frame = self.view.frame;
frame.origin.y=0;
self.view.frame = frame;

在我关闭模态视图控制器之后,我就可以解决这个问题。该框架似乎在y轴上移动了20像素。尽管如此,我仍然不知道是什么导致了这种移动。


你是否发现需要将所有子视图向下移动20像素才能使它们不重叠状态栏? - Daniel
不,我只是将它们设置为与滚动视图的框架相同。我正在使用透明状态栏,所以如果它们重叠我并不介意。 - Nathaniel Martin
2个回答

1

我曾经遇到过这个问题,原因是我的第一个视图控制器(在UIWindow上)的设置方式有问题。这很奇怪,因为我以前从未遇到过这种情况。我观察到的行为是,当你在点(0,0)添加子视图时,它会与状态栏重叠,这不是通常的情况。通常视图知道状态栏并会适当地表现。作为副作用,当你推出一个去掉状态栏的模态视图后,关闭它后我看到了你所看到的同样的问题。我解决这个问题的方法是将UIWindow的视图设置为我的控制器视图,在nib中进行设置,这似乎解决了所有问题。再次说明,我不知道为什么使用CGRectMake(0,0,320,460)在程序中简单地添加窗口会出现这种奇怪的行为,因为我之前的所有项目都是这样做的,并且看到了正确的行为。但是当我在nib中设置它时,它按预期工作。也许这也是你的问题。


我不确定我完全理解。UIWindow没有view属性,我以为UIWindow *就是一个view。现在我正在使用以下代码将我的视图添加到窗口中:[window addSubview:scrollViewController.view]; - Nathaniel Martin
此外,模态视图控制器不会隐藏状态栏。 - Nathaniel Martin
在我的情况下,模态视图隐藏了状态栏(但也许那不是引起问题的原因,而是模态视图被推出),但要查看我通过nib所做的事情,请转到XCode创建一个新项目并选择View based(这将创建具有视图的控制器),查看MainWindow nib,你就会明白我的意思。 - Daniel

0
原来这与以下有关: 当分页scrollView滚动时,ModalViewController在动画期间不显示 我有一些视图控制器的高度不匹配,这使得一切都错了。
一些视图的高度为460像素,而另一些则为480像素。由于某种原因,每次模态视图控制器消失时,它会向上移动20像素。一旦我将所有内容都设置为460像素,一切就正常了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接