我想在应用中使用UIScrollView
作为我的主要容器,让我可以在子视图之间来回滑动。为实现这一目标,我创建了一个UIViewController
子类,其中包含UIScrollView
IBOutlet :
在viewDidLoad
方法中,我构建了子页面:
for (int i= 0; i< pageCount; i++)
{
CGRect frame = self.scrollView.frame;
frame.origin.x = frame.size.width * i;
frame.origin.y = 0;
UIWebView* aWebView= [[UIWebView alloc] initWithFrame:frame];
[self.scrollView addSubview:aWebView];
}
启动应用程序(纵向模式)时,一切正常。也就是说,UIWebViews
并排放置正确的尺寸,我可以在它们之间来回滑动。
当我旋转到横向时,似乎滚动视图大小和子视图都没有调整大小。
我不知道我应该做些什么才能调整子视图和scrollview本身的大小,或者代码中我应该做什么,我似乎无法找到任何示例。
任何人都知道该怎么做?
[edit]尝试按照mahboudz的建议调整大小:
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{
self.scrollView.contentSize = CGSizeMake(self.scrollView.frame.size.width * pageCount, self.scrollView.frame.size.height);
for (int i= 0; i< pageCount; i++)
{
CGRect frame = self.scrollView.frame;
frame.origin.x = frame.size.width * i;
frame.origin.y = 0;
UIWebView* view= [[self.scrollView subviews] objectAtIndex:i];
view.frame= frame;
}
}
这种做了我想要的,但有以下问题:
1)人们可以看到子视图在改变方向时会增大到正确的屏幕尺寸
2)当当前页面是例如5页的第2页时,页面在方向更改后不完全可见,但是像40像素一样在屏幕外
3)根据应用程序是以纵向还是横向模式(模拟器)启动,我会得到奇怪的效果,请尝试解释:
以纵向模式启动应用时:
http://i53.tinypic.com/21jr76x.png
http://i55.tinypic.com/if3iiw.png
当应用程序以横向模式启动时:
我在纵向模式下获得相同的乱码/屏幕外毛刺
在纵向和横向之间来回切换,可以将其修复为横向模式
但是:纵向模式的子视图将具有横向模式的宽度,因此子视图太宽
我试图修复1)在willRotateToInterfaceOrientation
中执行上面的代码但是它完全弄乱了布局。
我修正了2),将以下代码添加到didRotateFromInterfaceOrientation
:
// update the scroll view to the appropriate page
CGRect frame = self.scrollView.frame;
frame.origin.x = frame.size.width * self.currentPage;
frame.origin.y = 0;
[self.scrollView scrollRectToVisible:frame animated:NO];
注意:当前页面在scrollViewDidScroll
我不知道如何修复3)
答案 0 :(得分:3)
您需要重置帧大小,内容大小和内容偏移量,以便将子视图放在合适的位置。
CGFloat screenHeight =[UIScreen mainScreen].bounds.size.height;
CGFloat screenWidth =[UIScreen mainScreen].bounds.size.width;
self.scrollView.frame = CGRectMake(0, 0, screenWidth, screenHeight);
self.scrollView.contentSize = CGSizeMake(scrollView.frame.size.width * numberOfPages, self.scrollView.frame.size.height);
self.scrollView.contentOffset = CGPointMake(visiblePageBeforeRotation * self.scrollView.bounds.size.width, 0);
此代码应放在方法
中-(void)willRotateToInterfaceOrientation: (UIInterfaceOrientation)orientation duration:(NSTimeInterval)duration
检查这个问题的答案: Clean autorotation transitions in a paging UIScrollView 它有一个很好的例子,名为Rotolling,用于在启用分页的情况下旋转UIScrollView。
希望这有帮助。
P.S:我在旋转时重新定位UIWebView的中心时遇到了问题。
答案 1 :(得分:0)
您需要实施viewWillRotate/viewDidRotate
并根据需要调整内容大小和方向。