4

我有一个带有分页的滚动视图。在 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)];


    }

一切正常滚动视图滚动流畅,没有对角滚动。

但当方向改变时,

我必须再次设置滚动视图的框架和内容大小,我将其设置如下

-(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,这还不够。它又增加了一个问题,即滚动视图开始对角滚动,这是我不想要的,因为它看起来很奇怪。谁能帮助我了解我在哪里以及缺少什么?

我已将滚动视图的自动调整大小掩码设置为

[scroll setAutoresizingMask:UIViewAutoresizingFlexibleLeftMargin|UIViewAutoresizingFlexibleRightMargin|UIViewAutoresizingFlexibleHeight];

但改变它没有帮助。

4

2 回答 2

5
  1. 不要使用UIDeviceOrientation. 改为使用UIInterfaceOrientationDeviceOrientation这里有两个你不需要的额外选项。(UIDeviceOrientationFaceUpUIDeviceOrientationFaceDown)

  2. Yes从返回shouldAutorotateToInterfaceOrientation

  3. willRotateToInterfaceOrientation: duration:每次旋转设备时都会调用Now 。

  4. 像这样实现这个方法。

    -(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);
    } 
    

    让,

    页数 = 2

    状态栏高度 = 20

于 2012-11-17T15:23:56.307 回答
2

这是您的代码中的问题。为什么要这样设置帧大小?您只有320px width. 而当它变为 时landscape,高度将仅为320px。但是您将滚动设置height480pxand it goes out of the screenand start to scroll diagonally

self.scroll.frame = CGRectMake(0,0,480,480);

而不是那个帧大小,像这样改变

self.scroll.frame = CGRectMake(0,0,480,320);

您需要根据滚动视图中任一方向的内容设置内容大小。

于 2012-11-17T15:23:15.480 回答