UIScrollView的内容大小时方向变化(UIScrollview content size w

2019-07-03 22:07发布

我有一个分页滚动视图。 在viewDidLoad中我检查当前的方向是横向的话,我设置其contentsize的身高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)];


    }

一切正常滚动视图滚动smoothy并没有角滚动。

但是,当方向改变,

我必须重新设置滚动型的框架和contentsize,我将其设置为跟随

-(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];

但改变它不帮助。

Answer 1:

这是在你的代码中的问题。 为什么要设置框的大小是这样? 你只有屏幕尺寸320px width 。 而当它变成landscape ,高度将只有320px 。 但是,你要设置滚动height480px ,它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);

而你需要设置的内容的大小取决于你在任何方向滚动视图中具有的内容



Answer 2:

  1. 不要使用UIDeviceOrientation 。 使用UIInterfaceOrientation代替。 DeviceOrientation有你不需要这里有两个额外的选项。 ( UIDeviceOrientationFaceUpUIDeviceOrientationFaceDown

  2. 返回YesshouldAutorotateToInterfaceOrientation

  3. 现在willRotateToInterfaceOrientation: duration:都会被调用您旋转设备时。

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

    让,

    PAGENUMBER = 2

    statusBarHeight = 20



文章来源: UIScrollview content size when orientation changes