UIScrollView 在模态视图控制器的动画演示中滚动到不同的位置
Posted
技术标签:
【中文标题】UIScrollView 在模态视图控制器的动画演示中滚动到不同的位置【英文标题】:UIScrollView scrolls to different position while animating presentation of modal view controller 【发布时间】:2013-07-03 06:32:45 【问题描述】:我使用UIScrollView
来分页三个不同的UIViewControllers
。寻呼机初始化为从开始显示第 1 页。所以用户可以从头开始向左或向右滑动。当我从中间视图控制器呈现模态视图控制器时,UIScrollView
在呈现视图控制器的动画期间临时滚动到第一页。当我关闭模态视图控制器时,一切都恢复正常,UIScrollView
显示中心视图控制器。
我希望(并希望)UIScrollView
在动画期间保持其位置。
这不是导致崩溃或其他问题的技术错误,它只是丑陋。
以前有人吃过吗?知道如何解决吗?
【问题讨论】:
所以要清楚,问题是当从第二页呈现模态转换时,您的滚动视图正在滚动回您的第一页?另外,您是否使用父子视图控制器包含? 能否请您尝试在 uiscrollview 上禁用分页并检查是否仍然出现? 您是否尝试将属性 scrollEnabled 设置为 NO 然后返回 YES ? 是的,正确的。是的,我们正在使用视图控制器容器。 在加载模态视图之前将scrollEnabled
设置为 no right 没有帮助。 setPagingEnabled
也一样。这很奇怪,因为在动画期间关闭模态视图控制器时,我可以看到想要的第二个视图。不是它在节目动画期间制作的第一个动画。
【参考方案1】:
我也遇到过同样的问题,经过大量调查,这似乎是 UIKit 中与滚动视图和 AutoLayout 相关的错误。这是“修复”...
在 viewDidDisappear: 中,将当前的滚动视图 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;
);
【讨论】:
在viewDidDisappear
和viewWillDisappear
中,scrollview.contentOffset
也是0, 0
。并且self.scrollView.contentOffset = manual offset;
不执行,仅在添加延迟时才有效。以上是关于UIScrollView 在模态视图控制器的动画演示中滚动到不同的位置的主要内容,如果未能解决你的问题,请参考以下文章