0

我试图了解我在使用 iOS 通用应用程序时遇到的问题。我有一个 UIScrollView,我希望它的页面占据设备的整个尺寸并在旋转时自行调整。

在我的viewDidLoad方法中,我正在测试:

NSArray *colors = [NSArray arrayWithObjects:[UIColor orangeColor], [UIColor cyanColor], [UIColor redColor], [UIColor greenColor], [UIColor blueColor], nil];

    for (int i = 0; i < colors.count; i++) {
        CGRect frame;
        frame.origin.x = _scrollView.bounds.size.width * i;
        frame.origin.y = 0;
        frame.size = _scrollView.bounds.size;

        UIView *subview = [[UIView alloc] initWithFrame:frame];
        subview.backgroundColor = [colors objectAtIndex:i];
        [_scrollView addSubview:subview];

    }

    _scrollView.contentSize = CGSizeMake(_scrollView.bounds.size.width * colors.count, _scrollView.bounds.size.height);

然后我在didRotateFromInterfaceOrientation方法中添加:

_scrollView.contentSize = CGSizeMake(_scrollView.bounds.size.width * colors.count, _scrollView.bounds.size.height);

for (int i= 0; i< colors.count; i++)
{
    CGRect frame;
    frame.origin.x = _scrollView.bounds.size.width * i;
    frame.origin.y = 0;
    frame.size = _scrollView.bounds.size;


    UIView *subview= [[_scrollView subviews] objectAtIndex:i];

    subview.frame= frame;
}

这似乎可行,但我似乎在设备旋转时在主视图上有一些剪辑。

这是旋转时发生的屏幕截图: 在此处输入图像描述

我以为发生这种情况是因为我在旋转后更改了大小,但我尝试在willRotateToInterfaceOrientation方法中处理它,但它给出了错误的结果......

  • 我处理不正确吗?
  • 什么是正确的方法?

蒂亚!S。

我处理不正确吗?

4

1 回答 1

0

您应该将更改边界的代码放在 中willRotateToInterfaceOrientation,但在动画块中这样做(使用[UIView animateWithDuration:0.4 animations:...])_ 以便过渡将是平滑的而不是立即的。

额外注意的是,在 willRotateToInterfaceOrientation 内部,父视图还没有被调整大小,所以你不能依赖它的边界来计算视图的最终位置,而是你必须手动这样做。

于 2012-05-17T08:23:46.857 回答