4

在我的

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

方法,我有代码可以在应用程序随设备旋转时重新定位和调整滚动视图的大小。我用下面的代码来做:

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

    }
}

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

4

5 回答 5

4

改变Frame一切都很好,但是当谈到UIScrollViews它时contentSize,一切都变得不同了。contentSize更改方向时需要设置。您可以通过在更改方向时添加类似的内容来做到这一点。

[mT.buttonScroll setContentSize:CGSizeMake(width, height)];

我认为这mT.buttonScroll是某种UIScrollView.

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

如果不给我们评论,希望这会有所帮助,我会尽力提供帮助。

于 2013-01-21T17:22:38.297 回答
0

我认为您应该使用shouldAutorotateToInterfaceOrientation并观察您的旋转和 UI 响应能力。

在我的测试中,它适用于我提到的方法。willRotatetoInterfaceOrientation在其“应该”对应物之后被调用。否则,它根本不会被调用。

于 2013-01-21T14:47:39.087 回答
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) ];
}
}
于 2015-06-17T03:36:04.773 回答
0

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

于 2017-11-15T08:07:59.650 回答
-1

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

此外,我假设在计算 rect 时,您会考虑其他视图 rect(如果存在),如导航栏、标签栏、状态栏

于 2013-01-21T16:08:24.663 回答