UIScrollView旋转后不允许滚动或交互

时间:2013-01-11 21:00:10

标签: ios uiscrollview ios-simulator uiinterfaceorientation uitouch

在我的

-(void) willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration;

方法,我有代码在app随设备一起旋转时重新定位和调整scrollview的大小。我使用以下代码执行此操作:

-(void) willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration{

    [super willRotateToInterfaceOrientation:toInterfaceOrientation duration:0.5f];

    if (toInterfaceOrientation == UIInterfaceOrientationLandscapeRight){
         //landscape
    [mT.buttonScroll setFrame:CGRectMake(0, 544, 1024, 160)];

    }else if (toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft){
        //landscape
    [mT.buttonScroll setFrame:CGRectMake(0, 544, 1024, 160)];

    }else if (toInterfaceOrientation == UIInterfaceOrientationPortrait){
       //portrait
    [mT.buttonScroll setFrame:CGRectMake(0, 800, 768, 160)];

    }else if (toInterfaceOrientation == UIInterfaceOrientationPortraitUpsideDown){
      //portrait
    [mT.buttonScroll setFrame:CGRectMake(0, 800, 768, 160)];

    }
}

一切都正常旋转,但是一旦我再次旋转滚动视图就完全无法触及。无法滚动或触摸其中的任何按钮。然后,如果我旋转回上一个视图,触摸会返回,依此类推。有谁知道它为什么会这样做?

5 个答案:

答案 0 :(得分:4)

更改Frame一切都很好,但是当UIScrollViews contentSize时,contentSize会产生重大影响。更改方向时需要设置[mT.buttonScroll setContentSize:CGSizeMake(width, height)]; 。您可以通过在更改方向时添加类似的内容来完成此操作。

mT.buttonScroll

我认为UIScrollView是某种{{1}}。

这里发生的是您将内容区域的大小重置为您想要的大小。你可以在这里修改宽度和高度。

希望这有帮助,如果不给我们发表评论,我会尝试帮助。

答案 1 :(得分:0)

我认为您应该使用 shouldAutorotateToInterfaceOrientation 并观察您的轮播和用户界面响应。

在我的测试中,它与我提到的方法一起工作正常。 willRotatetoInterfaceOrientation 在其“应该”对应后被调用。否则,它根本不会被调用。

答案 2 :(得分:0)

除了大力水手的回答(这是正确的;)我发现我需要在这样的地方设置内容大小以避免这个问题。

-(void)viewDidAppear:(BOOL)animated{
[super viewDidAppear:animated];
[scroller setScrollEnabled:YES];
[scroller setContentSize:CGSizeMake (0,100)];
}

-(void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
[scroller setScrollEnabled:YES];
[scroller setContentSize:CGSizeMake (0,100) ];
}

-(void)viewDidLoad
{
[super viewDidLoad];
[scroller setScrollEnabled:YES];
[scroller setContentSize:CGSizeMake (0,100) ];
}

-(void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{
if ([[UIDevice currentDevice] orientation] == UIDeviceOrientationLandscapeLeft || [[UIDevice currentDevice] orientation] == UIDeviceOrientationLandscapeRight)
{
NSLog(@"Lanscapse");
[scroller setScrollEnabled:YES];
[scroller setContentSize:CGSizeMake (0,100];
}
if([[UIDevice currentDevice] orientation] == UIDeviceOrientationPortrait || [[UIDevice currentDevice] orientation] == UIDeviceOrientationPortraitUpsideDown )
{
NSLog(@"Portrait");
[scroller setScrollEnabled:YES];
[scroller setContentSize:CGSizeMake (0,100) ];
}
}

答案 3 :(得分:0)

我也面临同样的问题 请遵循以下步骤: 1.给scrollview提供顶部,底部,前导和底部约束 2.在scrollview中的包装器视图给出顶部,底部,前导和底部以及与父视图相等的宽度。 3. 非常重要的一步:将所有内部UI元素链接到前导,尾随,顶部,底部和高度。特别为最后的元素记得添加底部以及高度和尾随

答案 4 :(得分:-1)

查看滚动视图的框架。旋转后,scrollview的框架正在穿过窗口框架,因此scrollview没有响应触摸。

另外我假设在计算rect时你正在考虑其他视图rect如果存在像导航栏,tabbar,状态栏