I have a scrollview with pagination. In viewDidLoad i check if the current orientation is landscape then i set its contentsize's height 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)];
}
everything works fine scrollview scrolls smoothy and there is no diagonal scrolling.
but when orientation changes,
i have to set scrollview's frame and contentsize again and i am setting it as follow
-(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)];
}
}
i cant understand why i have to set content size's height upto 600 in landscape mode, and that too isnt enough. and it adds one more problem that scrollview starts scrolling diagonally which i dont want as it looks so weird. Can anyone help me understanding where and what i am missing?
i have set scrollview's autoresizing mask as
[scroll setAutoresizingMask:UIViewAutoresizingFlexibleLeftMargin|UIViewAutoresizingFlexibleRightMargin|UIViewAutoresizingFlexibleHeight];
but changing it doesnt help.
Here it is a problem in your code. Why you are setting the frame size like this?? You have only the screen size of
320px width
. And when it changes tolandscape
, height will be only320px
. But you are setting the scrollheight
as480px
and itgoes out of the screen
andstart to scroll diagonally
.Instead of that frame size, change like this
And you need to set the content size depend on the content you are having inside the scroll view in either orientation.
Don't use
UIDeviceOrientation
. UseUIInterfaceOrientation
instead.DeviceOrientation
has two extra options you don't need here. (UIDeviceOrientationFaceUp
andUIDeviceOrientationFaceDown
)Return
Yes
fromshouldAutorotateToInterfaceOrientation
Now
willRotateToInterfaceOrientation: duration:
will be called every time you rotate your device.Implement this method like this.
Let,
pageNumber = 2
statusBarHeight = 20