我有一个带分页的滚动视图。在viewDidLoad中,我检查当前方向是否为横向,然后我设置其内容大小的高度440
if (UIDeviceOrientationIsPortrait([[UIDevice currentDevice] orientation]))
{
[scroll setContentSize:CGSizeMake(self.scroll.frame.size.width*numberOfPages,340)];
}
else if (UIDeviceOrientationIsLandscape([[UIDevice currentDevice] orientation]))
{
[scroll setFrame:CGRectMake(0,0,480,480)];
[scroll setContentSize:CGSizeMake(self.scroll.frame.size.width*numberOfPages, 440)];
}
一切正常滚动视图滚动顺畅,没有对角线滚动。
但是当方向改变时,
我必须再次设置scrollview的框架和内容,我将其设置为
-(void)orientationChanged:(id)object
{
if(UIDeviceOrientationIsPortrait([[UIDevice currentDevice] orientation]))
{
self.scroll.frame = [[UIScreen mainScreen]bounds];
[scroll setContentSize:CGSizeMake(self.scroll.frame.size.width*numberOfPages, 340)];
}
else
{
self.scroll.frame = CGRectMake(0,0,480,480);
[scroll setContentSize:CGSizeMake(self.scroll.frame.size.width*numberOfPages, 600)];
}
}
我无法理解为什么我必须在横向模式下将内容大小的高度设置为600,这也不够。并且它增加了另一个问题,即scrollview开始对角线滚动,我不想要,因为它看起来很奇怪。任何人都可以帮我理解我错过的地方和地点吗?
我已将scrollview的自动调整模板设置为
[scroll setAutoresizingMask:UIViewAutoresizingFlexibleLeftMargin|UIViewAutoresizingFlexibleRightMargin|UIViewAutoresizingFlexibleHeight];
但改变它没有帮助。
答案 0 :(得分:5)
请勿使用UIDeviceOrientation
。请改用UIInterfaceOrientation
。 DeviceOrientation
有两个您不需要的额外选项。 (UIDeviceOrientationFaceUp
和UIDeviceOrientationFaceDown
)
从Yes
shouldAutorotateToInterfaceOrientation
每次旋转设备时都会调用willRotateToInterfaceOrientation: duration:
。
像这样实现这个方法。
-(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
CGRect frame;
int pageNumber = 2;
int statusBarHeight = 20;
if ((toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft) || (toInterfaceOrientation == UIInterfaceOrientationLandscapeRight)) {
frame = CGRectMake(0, 0, 480, 320 - statusBarHeight);
} else {
frame = CGRectMake(0, 0, 320, 480 - statusBarHeight);
}
scrollView.frame = frame;
scrollView.contentSize = CGSizeMake(frame.size.width * 2, frame.size.height);
}
让,
pageNumber = 2
statusBarHeight = 20
答案 1 :(得分:2)
这是您的代码中的问题。你为什么要这样设置帧大小?您的屏幕尺寸仅为320px width
。当它更改为landscape
时,高度将仅为320px
。但您将滚动height
设为480px
,goes out of the screen
和start to scroll diagonally
。
self.scroll.frame = CGRectMake(0,0,480,480);
而不是那个帧大小,改变如下
self.scroll.frame = CGRectMake(0,0,480,320);
您需要设置内容大小,具体取决于您在滚动视图中的内容。