2012-05-03 6 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이됩니다. 슈퍼 뷰에 추가하면 맨 아래 탭 막대로 인해 실제로 작아집니다. 자동 크기 조정 메커니즘이이 문제에 도움이됩니다.

그래서 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 크기를 조정하더라도 pickerview의 위치가 변경됩니다.