我有一个UIScrollView,其中启用了垂直滚动。我正在显示一个按钮网格(类似于照片查看器图像网格)。必须根据屏幕方向以不同方式绘制网格,以便使用所有屏幕空间。考虑到按钮的大小,我可以在纵向上每行3个,在横向上每行4个。
我重新定位了所有按钮:willRotateToInterfaceOrientation:duration,然后在我的UIScrollView上调用:setContentSize :.除了在调用SetContentSize之后发生的自动滚动外,一切似乎都运行得很好。换句话说,假设我是在纵向,并且在列表中向下滚动3/4,当我旋转到横向时,它会自动滚动所有背面到顶部。
有趣的是,在同一场景中,如果我要向上或向下滚动一个小动画,然后立即旋转设备,滚动视图会正确重绘,并保留当前滚动位置!
所以,要明确的是,这里的罪魁祸首似乎是SetContentSize:,但显然我必须调用它来滚动视图才能正确滚动。
关于如何保留当前滚动位置的任何想法?
谢谢!
答案 0 :(得分:1)
您可以尝试实施UIScrollViewDelegate
方法scrollViewShouldScrollToTop:
,它告诉调用者是否滚动到顶部。您可能必须在代理中有一些标志,指示是否正在进行轮换,因为在正常情况下,您实际上可能希望能够点击状态栏并使滚动视图滚动到顶部。
另一方面,如果您不希望滚动视图自动滚动到顶部,只需实现该委托方法并让它返回NO。
答案 1 :(得分:0)
我遇到了这个问题,就这样做了,对我来说效果很好
- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
//calculate percentage down scrollview currently at
float c = self.scrollView.contentOffset.y / self.scrollView.contentSize.height;
//reposition subviews in the scrollview
[self positionThumbnails:toInterfaceOrientation];
//set the new scrollview offset to the same percentage,
// using the new scrollview height to calculate
self.scrollView.contentOffset =
CGPointMake(0, c * self.scrollView.contentSize.height);
}
在我的情况下,我有一个滚动视图,其宽度与设备大小和可变高度相同