在界面方向改变后保持UIScrollView位置

时间:2015-07-18 21:29:22

标签: ios xcode uiscrollview uiinterfaceorientation contentoffset

我有一个 UIScrollView ,它会在每个界面方向更改后更新其框架,保持其高度但动态更新其宽度以始终填充新宽度。由于它是一个水平滚动视图,启用了分页,我自然会根据新的大小更新其内容。我这样做如下(显然它是一个简化的代码,但你应该得到这个想法):

scrollView.frame = CGRectMake(0.0f, 0.0f, window.size.width, 200.0f);
// Content is being deleted here
// Then redraw with the new width in mind
scrollView.contentSize = (window.size.width * [database count]);
[scrollView setContentOffset:CGPointMake(currentPostionX, 0.0f) animated:NO];

这种方法效果很好;每次界面方向更改后,scrollview都会保留其先前的位置。我的问题是它不顺利。实际上它非常难看,经常会在重置contentOffset时导致抖动,跳跃“动画”(如果我将'动画'设置为YES则无关紧要。)

必须有一种更好的方法,并使滚动视图根据其新尺寸保持其位置。

有什么想法吗?

更新:实际上,我在viewWillTransitionToSize的animateAlongsideTransition部分调用上述方法,因为这会在不同大小之间进行更改时创建相当不错的过渡。如果我将它们放入完成部分,旋转后所有内容都会“弹出”到位,这非常难看。这样一切都很顺利,除了在最后的正确位置跳跃。

1 个答案:

答案 0 :(得分:-1)

在这个答案中,我将假设你的陈述:

  

... UIScrollView在每次界面方向改变后更新其框架......

真正意味着在每个界面方向更改后

如果是,请使用-viewWillTransitionToSize:withTransitionCoordinator:并访问文档here