2012-05-03 3 views
2

UIPickerViewとツールバー(216 + 44)のカスタムビューがあります。初期化時(viewDidLoad)に、このカスタムビューは、次のコードを使用して画面の下にプッシュされます。tabBarが存在する場合の奇妙な位置付けの問題

CGPoint newOrigin; 
    newOrigin.x = pickerViewOutlet.frame.size.width/2; 
    newOrigin.y = self.view.frame.size.height + ((pickerViewOutlet.frame.size.height)/2); 
    NSLog(@"%f,%f",self.view.frame.size.height,(pickerViewOutlet.frame.size.height)/2); 
    pickerViewOutlet.center = CGPointMake(newOrigin.x, newOrigin.y); 

ボタンをクリックすると、次のコードを使用してこのビューがプルアップされます。

[self.view bringSubviewToFront:pickerViewOutlet]; 
    NSLog(@"tabbar %f",self.tabBarController.tabBar.frame.size.height); 
    CGPoint showOrigin; 
    showOrigin.x = pickerViewOutlet.frame.size.width/2; 
    showOrigin.y = pickerViewOutlet.center.y - pickerViewOutlet.frame.size.height; 
     //self.tabBarController.tabBar.frame.size.height ; 
    NSLog(@"showpicker %f,%f",pickerViewOutlet.center.y,pickerViewOutlet.frame.size.height); 
    [UIView beginAnimations:nil context:NULL]; 

    [UIView setAnimationBeginsFromCurrentState:YES]; 

    [UIView setAnimationDuration:0.5]; 
    pickerViewOutlet.center=CGPointMake(showOrigin.x, showOrigin.y); 


    [UIView commitAnimations]; 
    [pickerCtrlOutlet reloadAllComponents]; 

これは問題なく動作します。しかし、これは上記のコードをに変更された場合にコードがしかし

showOrigin.y = pickerViewOutlet.center.y - pickerViewOutlet.frame.size.height - self.tabBarController.tabBar.frame.size.height ; 

ように変更しても、ページの一番下のタブバーコントローラの存在下で(図の一部は、タブバーの下で)動作しません

showOrigin.y = pickerViewOutlet.center.y - pickerViewOutlet.frame.size.height - self.tabBarController.tabBar.frame.size.height - 90; 

ビューがタブバーのすぐ上にある場合は、完全に機能します。

答えて

0

私が知る限り、viewDidLoadでは、self.viewはまだスーパービューに追加されていないため、フレームは正しいサイズに設定されていません。

たとえば、InterfaceBuilderでUIViewをデザインすると、320x460のUIビューが作成されます。スーパービューに追加すると、下部のタブバーのため実際には小さくなります。この問題では、自動サイズ変更のメカニズムが役立ちます。

viewDidLoadで間違った値を使用してピッカービューを配置していて、古いものと比べて新しい位置を使用すると、それでも間違っていると思います。ここで

は、私がこの書き込み方法は以下のようになります

[self.view bringSubviewToFront:pickerViewOutlet]; 
    NSLog(@"tabbar %f",self.tabBarController.tabBar.frame.size.height); 
    CGPoint showOrigin; 

    showOrigin.x = pickerViewOutlet.frame.size.width/2; 
    //Notice this line ----------- 
    showOrigin.y = self.view.frame.size.height - pickerViewOutlet.frame.size.height/2; 

     //self.tabBarController.tabBar.frame.size.height ; 
    NSLog(@"showpicker %f,%f",pickerViewOutlet.center.y,pickerViewOutlet.frame.size.height); 
    [UIView beginAnimations:nil context:NULL]; 

    [UIView setAnimationBeginsFromCurrentState:YES]; 

    [UIView setAnimationDuration:0.5]; 
    pickerViewOutlet.center=CGPointMake(showOrigin.x, showOrigin.y); 


    [UIView commitAnimations]; 
    [pickerCtrlOutlet reloadAllComponents]; 

お知らせshowOrigin.y = self.view.frame.size.height - ...

をと(余分なポイントは、あなたが柔軟トップ(あるいは、ロックにピッカービューの自動サイズ変更マスクを設定することができます:)のために下の座標)。これを行うと、viewDidLoadでピッカービューを配置してからself.viewのサイズを変更しても、ピッカービューの位置も変更されます。