如何在设备更改方向时调整屏幕上的子视图位置?

时间:2011-11-08 17:34:15

标签: ipad orientation uipickerview autorotate cgrectmake

当用户点击行时,我在UItableviewcontroller上添加了pickerview。我正在使用以下代码来显示它。     [self.view.window addSubview:languagePicker];

    CGRect screenRect = [[UIScreen mainScreen] applicationFrame];
    CGSize pickerSize = CGSizeMake(768.0, 216.0);
    CGRect startRect = CGRectMake(0.0,
                                  screenRect.origin.y + screenRect.size.height,
                                  pickerSize.width, pickerSize.height);
    self.languagePicker.frame = startRect;

    // compute the end frame
    CGRect pickerRect = CGRectMake(0.0,
                                   screenRect.origin.y + screenRect.size.height - pickerSize.height,
                                   pickerSize.width,
                                   pickerSize.height);


        self.languagePicker.frame=startRect;
        [UIView beginAnimations:nil context:nil];
        [UIView setAnimationDuration:0.5];
        [UIView setAnimationTransition:UIViewAnimationOptionTransitionNone forView:self.view.window cache:YES];
        [self.languagePicker setFrame:pickerRect];
        [UIView commitAnimations];

当设备处于纵向方向时,它似乎工作得很完美,但一旦方向改变,除了添加的选择器视图外,一切都会自行调整。

我可以获取设备方向,删除旧视图并根据方向添加新视图,但我不确定它是否是一个好方法。我可以用其他任何有效的方式吗?

萨米特

2 个答案:

答案 0 :(得分:0)

你应该设置:

self.languagePicker.autoresizingMask

这将有助于您的视图根据配置的约束自动调整。

答案 1 :(得分:0)

这是一个愚蠢的错误,而不是把这个pickerview放在视图本身上我只是拖动它并把它放在xib中。把它放在视野中解决了这个问题。