UIScrollView 无法正确恢复

Posted

技术标签:

【中文标题】UIScrollView 无法正确恢复【英文标题】:UIScrollView does not restore properly 【发布时间】:2013-08-02 02:25:22 【问题描述】:

我有一个 Scrollview,它的属性在 viewDidAppear 中设置。 现在,当我第一次到达 Scrollview 时,没有任何问题。但是我有分配给 UINavigationController 的按钮。因此,当我按下其中一个 UINavigationController 打开时,当我关闭导航控制器时,ScrollView 无法正确恢复。它基本上将屏幕中心对齐为先前按下的按钮位置。所以如果我尝试向上滚动它不会。

我已经尝试在我的 viewDidAppear 中使用它:

scrollView.center = CGPointMake(scrollView.contentOffset.x, scrollView.contentOffset.y); 

这不太奏效。我该如何解决这个问题?我使用的是ios6.1

【问题讨论】:

你能张贴一些图片来说明你的意思吗?我很难想象这个问题。 UIScrollview Autolayout Issue 的可能重复项 【参考方案1】:

其实我在这里找到了答案:

UIScrollview Autolayout Issue

我使用的确切代码是:

- (void)viewDidDisappear:(BOOL)animated 
    [super viewDidDisappear:animated];
    //save the current offset
    previousPoint = scrollView.contentOffset;
    //set current view to the beginning point
    self.scrollView.contentOffset = CGPointZero;


- (void)viewDidLayoutSubviews 
    [super viewDidLayoutSubviews];
    //retrieve the previous offset
    self.scrollView.contentOffset = previousPoint;

previousPoint 只不过是在实现上声明的 CGPoint 变量。

【讨论】:

【参考方案2】:

我以前也遇到过这个问题。 This answer 展示了如何解决这个问题。

基本上,您需要在viewWillAppear:viewDidDisappear: 中适当地设置滚动视图的contentOffset

编辑:这是另一个您可能会觉得有用的相关问题,UIScrollview Autolayout Issue。

【讨论】:

@SarpKaya recentContentOffest 是一个变量,当您离开视图时保存滚动视图的 contentOffset(在您的情况下,当您点击按钮时 UINavigationController 打开)。我链接到的答案会在滚动视图消失时保存此contentOffset,以便在滚动视图再次出现时可以将其重置。

以上是关于UIScrollView 无法正确恢复的主要内容,如果未能解决你的问题,请参考以下文章

限制UIScrollView中的可滚动区域

缩放和重绘 UIScrollView 内容后设置 contentOffset

在 UIScrollview 中禁用对角线拖动

捏放大到 UITableViewCell 内的 UIImageView

如何在 ios 中为 UIScrollView 设置对齐方式

更改界面方向时UIScrollView上的奇怪跳转(ATPagingView)