4

私はしばらく使用してきた UIPopoverController を持っています。現在、iOS 7 用にコードを更新していますが、ポップオーバーのサイズを変更すると、ポップオーバーが突然画面上を移動し、ユーザー エクスペリエンスが非常に悪くなります。

縦向きのときは起こりません。タップしてポップオーバーを開き、ボタンをタップするとポップオーバーが展開され、すべて問題ありません。ただし、横向きに切り替えて同じことを行うと、ボタンをタップしてポップオーバーを展開すると、別の場所にスライドします。

これが私が話していることを示すビデオです: https://vimeo.com/75632364

これは、ユーザーがポップオーバーのサイズ変更を引き起こすボタンをタップしたときに実行されるコードです。

- (IBAction) touchedButtonPayDownLoan:(id)sender {

    UIView *payOffView = nil;
    if ([self.liability isBankLoan]) {
        payOffView = self.viewPayoffBank;
    } else {
        payOffView = self.viewPayoffOther;
    }

    CGRect loanFrame = payOffView.frame;
    loanFrame.origin.y = self.toolbar.frame.origin.y;
    payOffView.frame = loanFrame;
    [self.view addSubview:payOffView];
    [self.view bringSubviewToFront:self.toolbar];

    [UIView beginAnimations:@"Show Payoff View" context:nil];

    NSMutableArray *items = [[self.toolbar items] mutableCopy];
    [items removeLastObject];
    [items addObject:self.barButtonFinish];
    self.toolbar.items = items;

    // -------- RELEVANT BITS HERE ---------
    CGRect frame = self.view.frame;
    frame.size.height += payOffView.frame.size.height;
    self.view.frame = frame;
    self.preferredContentSize = frame.size;
    // -------- RELEVANT BITS HERE ---------

    [UIView commitAnimations];

}

ポップオーバーが位置をジャンプすることは望ましくありません。ユーザーを悩ませるからです。何か案は?

4

5 に答える 5

4

私は同様の問題に遭遇しました.ポップオーバーの動きは、新しいサイズのポップオーバーが最後の位置に収まらない、または新しいサイズの方が見栄えが良いとレイアウトマネージャーが考えていることが原因であることがわかりました-あなたでポップオーバーを作成している可能性が最も高いです

permittedArrowDirections = UIPopoverArrowDirectionAny

紛らわしいのは、ポップオーバーが新しい位置に移動しても、矢印が再描画されないことです。

私の側では、 allowedArrowDirections を 1 つの値 (UP または DOWN) に明示的に設定することで問題を解決しました。サイズ変更によってポップオーバーが移動しなくなりました。

お役に立てれば。

于 2013-10-09T09:31:39.330 に答える
1

ポップオーバーが表示されていて、そのサイズを変更したい場合は、次を使用する必要があります。

-[UIPopover setPopoverContentSize:animated:]

frameコントローラーの を直接変更しないでください。

于 2013-09-28T13:22:16.440 に答える
0

popoverController:willRepositionPopoverToRect:inView:iOS 7 の UIPopoverControllerDelegateの新しいメソッドを見てください。そこで UIPopover の位置を調整できます。

Appleのドキュメントから:

presentPopoverFromRect:inView:permittedArrowDirections:animated: メソッドを使用して提示されたポップオーバーの場合、インターフェースの向きが変わると、ポップオーバー コントローラはこのメソッドを呼び出します。デリゲートは、このメソッドを使用して、ポップオーバーの提案された位置を調整できます。

于 2013-12-07T03:42:34.313 に答える