UIScrollView 在模态视图控制器的动画呈现时滚动到不同位置

问题描述 投票:0回答:1

我使用

UIScrollView
来分页三个不同的
UIViewControllers
。寻呼机初始化为从头开始显示第 1 页。因此用户可以从头开始向左或向右滑动。当我从中间视图控制器呈现模态视图控制器时,在呈现的视图控制器的动画期间,
UIScrollView
暂时滚动到第一页。当我关闭模态视图控制器时,一切都恢复正常,并且
UIScrollView
显示中心视图控制器。

我希望(并且希望)

UIScrollView
在动画过程中保持其位置。

这不是导致崩溃或其他问题的技术错误,它只是很难看。

有人曾经有过这样的经历吗?知道如何解决吗?

cocoa-touch pagination uiscrollview presentmodalviewcontroller scroll-paging
1个回答
0
投票

我也遇到了同样的问题,经过大量调查,这似乎是 UIKit 中与滚动视图和自动布局相关的错误。这是“修复”...

在viewDidDisappear:中,将当前scrollview的contentOffset保存到一个属性中,并将其重置为零:

- (void)viewDidDisappear:(BOOL)animated 
{
    [super viewDidDisappear:animated];

    self.previousContentOffset = self.scrollView.contentOffset;

    self.scrollView.contentOffset = CGPointZero;
}

然后,在 viewWillAppear: 中,将内容偏移量重置回之前的值。我必须将其分派到主队列才能使其正常工作:

- (void)viewWillAppear:(BOOL)animated 
{
    if (!CGPointEqualToPoint(self.previousContentOffset, CGPointZero))
    {
        dispatch_async(dispatch_get_main_queue(), ^{
            self.scrollView.contentOffset = self.previousContentOffset;
        });
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.