0

UIPopOverControllerで奇妙な問題が発生しました。通常、私はこのようにポップオーバーを提示します:

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

ただし、ボタン(送信者)の右側に十分なスペースがなく、UIPopoverArrowDirectionUPを使用してボタンの下にポップオーバーが表示される場合があります。それは理にかなっています-ポップオーバーを正しく表示できない場合、コントローラーは別の矢印でポップオーバーを表示しようとします。

しかし、ボタン(送信者)を約10ピクセル左に移動すると、ポップオーバーはこのように動作しません。正しく表示するのに十分なスペースはまだありませんが、ポップオーバーの幅は約20ピクセルなので、矢印は変更されません。小さすぎます。

popovercontrollerを言う方法はありますか:「popoverにすべてのコンテンツを表示するのに十分なスペースがない場合は、矢印の方向を変更してください」?

4

1 に答える 1

4

UIPopoverArrowDirectionAnyいずれにせよ、Apple が推奨する を使用しないのはなぜUIPopoverArrowDirectionLeft | UIPopoverArrowDirectionUpですか。ポップオーバーの矢印の正確な方向は、それほど重要ではありません。

それがうまくいかない場合、唯一の選択肢はアクション メソッドで計算を行うことだと思います。(免責事項: 私はこれを試したことはありませんが、絶対にそうしなければならないのに、なぜそれができないのかわかりません。) まず、送信者の境界をトップレベル ビューの座標空間に変換します。アプリのビュー階層の詳細によっては、境界/フレームを適切なビューに変換する必要がある場合があります。何か奇妙なことが起こっていない限り、これはうまくいくはずです:

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

次に、結果の四角形が画面の右端からXポイント以上離れているかどうかを確認します。ここで、 Xはポップオーバーの幅 (黒い境界線と矢印を含む) です。十分なスペースがある場合は、上記のようにポップオーバーを表示します。そうでない場合は、代わりに UIPopoverArrowDirectionUp を使用してください。

于 2012-07-17T14:27:19.877 に答える