2012-07-17 2 views
0

UIPopOverController에서 이상한 문제가 발생했습니다. 일반적으로, 나는 팝 오버이 방법을 제시 :UIPopoverController를 화살표 방향으로 자동 변경하는 방법

[popoverVC presentPopoverFromRect:sender.frame 
       inView:sender.superview 
       permittedArrowDirections:UIPopoverArrowDirectionLeft 
       animated:NO]; 

그러나, 가끔 버튼 (발신자)의 오른쪽에는 충분한 공간이 없습니다과 팝 오버는 UIPopoverArrowDirectionUP있는 버튼 아래에 표시됩니다. 그것은 의미가 - popover 제대로 표시 할 수없는 경우, 컨트롤러가 다른 화살표로 표시하려고합니다.

그러나 단추 (보낸 사람)를 왼쪽으로 약 10 픽셀 이동하면 popover가 이러한 방식으로 동작하지 않습니다. 여전히 제대로 표시 할 공간이 없지만 popover는 ~ 20px이므로 너무 작습니다. 화살표가 바뀌지 않습니다.

popovercontroller를 말할 수있는 방법이 있습니까? "Popover에 모든 내용을 표시 할 공간이 충분하지 않으면 화살표 방향을 변경하십시오"?

답변

4

어쨌든 Apple에서 권장하는 UIPopoverArrowDirectionAny을 사용하지 않거나 꼭 필요한 경우 UIPopoverArrowDirectionLeft | UIPopoverArrowDirectionUp을 사용하지 않으시겠습니까? popover의 화살표의 정확한 방향은 그다지 중요하지 않습니다.

그래도 작동하지 않는다면, 유일한 선택은 동작 방법에서 일부 수학을하는 것입니다. (Disclaimer : 나는 결코 이것을 시도한 적이 없지만 절대적으로해야한다면 왜 안되는 지 알지 못합니다.) 먼저 보낸 사람의 범위를 최상위보기의 좌표 공간으로 변환합니다. 앱의보기 계층 구조에 따라 경계/프레임을 적절한보기로 /에서 변환해야 할 수도 있습니다. 당신이가는 이상한 무언가를 가지고하지 않는 한,이 작업을해야합니다 :

다음
[self.view convertRect:[sender bounds] fromView:sender] 

이 결과 사각형 이상 X 포인트 떨어진 X이있는 화면의 오른쪽 가장자리에서 있는지 여부를 확인 popover의 너비 (검은 색 테두리와 화살표 포함). 충분한 공간이 있다면 위에 말한대로 popover를 제시하십시오. 그렇지 않은 경우 UIPopoverArrowDirectionUp을 대신 사용하십시오.

+0

시도했습니다. UIPopoverArrowDirectionLeft | UIPopoverArrowDirectionUp하지만 왼쪽에 여전히 표시 할 수있는 경우에도 위쪽면에만 화살표가 표시됩니다. (나는 UIPopOverController가 가능할 때와 그렇지 않을 때를 모른다). – msmialko

+0

제안한대로 화면의 가장자리에서 거리를 수동으로 계산하려고했습니다. 아마 그것은 최선의 해결책이 아니지만 작동합니다. 그러나 : 다른 문제가 발생했습니다. 사용자가 장치를 돌릴 때 popoverArrowDirection을 변경하려고합니다. 다시 해고하지 않고 그것을 할 수있는 방법이 있습니까? – msmialko

+0

불행히도, 당신이 말한 것을 할 필요가 있습니다 - popover를 닫고'didRotateFromInterfaceOrientation :'에 다시 나타냅니다. –