2012-03-19 45 views
1

我有一個基於導航的應用程序,並說我的根控制器A導致一個viewController B被推,其中有一個與UITextFields幾個單元格的UITableView。爲什麼第一次在其父級viewController上更改設備方向時,UIPickerView不會調整大小?

前2個UITextField分別具有作爲其inputView的UIDatePicker和UIPickerView。此外,UIPickerView有4個組成部分,其UIViews通過

- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view 
{ 
    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 60, 37)]; 
    label.text = [NSString stringWithFormat:@"%@%i", ((component == 3) ? @"." : @""), row]; 
    label.textAlignment = UITextAlignmentCenter; 
    label.font = [UIFont boldSystemFontOfSize:24]; 
    label.backgroundColor = [UIColor clearColor]; 
    [label autorelease]; 

    return label; 
} 

返回在垂直方向上,UIPickerView是這樣的: enter image description here

我已經注意到如下:

CASE 1 - 更正

  1. 我在垂直方向viewController A.
  2. 我旋轉從豎直定向的設備/模擬器水平方位
  3. 我推的viewController乙
  4. 我導致UIPickerView彈出

拾取器幀被正確地拉伸以橫向模式和組件視圖仍然正確大小和中心:

enter image description here

乙UT

CASE 2 - 錯誤

  1. 我在一個的viewController在垂直方向。
  2. 我推的viewController乙
  3. 我旋轉從豎直定向的設備/模擬器水平方位
  4. 我導致UIPickerView彈出

在這種情況下,UIPickerView的組分得到弄亂:

enter image description here

有什麼想法?

回答

3

所以我想到了這麼多:不知道爲什麼,但本質上調用-setNeedsLayout缺少輸入視圖時,設備旋轉。 UIDatePicker(inputView = UIDatePicker)會導致一個自動(重新)自動出現在正確方向的選擇器,但是UIPickerView(inputView = UIPickerView)不會。

所以看起來UIPickerView可能沒有註冊方向更改或類似的東西。我通過手動註冊來解決問題。也就是說,在我的設置代碼中,我添加了:

[[NSNotificationCenter defaultCenter] addObserver:weightPicker 
             selector:@selector(setNeedsLayout) 
              name:UIDeviceOrientationDidChangeNotification 
               object:nil]; 

現在選取器表現得很好。

此外,請記住在textField取消分配之前先取消註冊NSNotificationCenter。

0

爲了記錄在案,一個稍微乾淨版本@SaldaVonSchwartz自己的答案:

- (void) didRotateFromInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
    [myPickerView setNeedsLayout]; 
} 

這是告訴你要調整myPickerView的子視圖的佈局myPickerView。應該做的伎倆。

相關問題