0

UIPopoverController内のNavigationControllerの下に表示されるUITableViewsを備えたiPadアプリを書いています。

アプリのメインビューコントローラーでボタンを選択すると、ポップオーバーが表示されます。ポップオーバーが開き、2つの行(UITableViewCells)を持つ最初のTableViewControllerが表示されます。最初の行に「検索」、2番目の行に「詳細設定」があります。最初の表示では、ポップオーバーは2行を表示するのに十分なサイズになっています。

この最初のTableViewControllerのdidSelectRowAtIndexPathをコーディングして、「検索」を選択すると、2番目のTableViewControllerがNavigationViewControllerにプッシュされるようにしました。この次のViewControllerを使用すると、ユーザーは検索を実行でき、検索結果がテーブルビューに入力されます。)この(検索結果)Table View Controllerは、検索によって返されるすべての行を収容するのに十分な長さです。したがって、検索テーブルビューコントローラを表示すると、検索ポップオーバーが長くなります。

検索をキャンセルすると(またはナビゲーションバーの[戻る]ボタンを押すと)、ポップオーバーは最初のテーブルビューコントローラー(2行しかないコントローラー)の表示に戻ります。ただし、この最初のテーブルビューコントローラのサイズは長くなりました。つまり、ポップオーバーは、サイズを2行のテーブルに戻すのではなく、2番目の(検索結果)テーブルビューコントローラーのサイズのままです(したがって、2行の[検索]と[詳細設定]に数字を加えたものになります)。空の行の)

私の質問は、この実装(つまり、テーブルビューコントローラーがナビゲーションコントローラーの下のポップオーバーに表示される)の階層内の各テーブルビューコントローラーを個別にサイズ設定し、ユーザーが戻ってナビゲートしたときに元のサイズに戻すにはどうすればよいですか?前方。これにはおそらく簡単な解決策がありますが、それは私を免れます!誰かが私に解決策を教えてくれるかどうか感謝します。

4

2 に答える 2

2

上記の解決策はもう機能しないため、より最新の (Swift) 代替案を次に示します。

popovercontroller を destinationViewControllers に渡すことができます。次に、viewWillAppear() で preferredContentSizeDidChangeForChildContentContainer を呼び出すと、ポップオーバーのサイズが自動的に変更されます。

override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)
    if let ppc = popoverController  {
        ppc.preferredContentSizeDidChangeForChildContentContainer(self)
    }
}

うまくいかない場合は、preferredContentSize を適切に実装してください。たとえば、次のような単一のセクションを使用して tableViewController のサイズを計算します。

override var preferredContentSize: CGSize {
    get {
        let sectionFrame    = self.tableView.rectForSection(0)
        let titleOnTop      = self.navigationController!.navigationBar.frame.height
        let height          = sectionFrame.height + titleOnTop
        return CGSize(width: super.preferredContentSize.width, height: height)
    }
    set { super.preferredContentSize = newValue }
}
于 2015-10-03T17:56:11.277 に答える
1

ユーザー @krasnyk による次の StackOverflow 投稿からの回答を実装しました。

ナビゲーション コントローラが埋め込まれたポップオーバーは、バック ナビゲーションのサイズを考慮しません

1回の変更でうまくいきました...

基本的に、上記の投稿で詳述されているのと同じ機能を 1 つの変更を加えて追加しました (PopupController のビュー階層で各 VC のサイズをハードコーディングしました)。

この関数を参照して、PopoverController に表示される VC チェーン内の各 VC の ViewDidLoad および ViewDidAppear 関数で正しいポップオーバー サイズを設定しました。

- (void) correctPopoverContentSize {
    //
    // removed the following line from the original code in above post as it did not
    // work for me 
    //      CGSize currentSetSizeForPopover = self.contentSizeForViewInPopover; 

    CGSize currentSetSizeForPopover = CGSizeMake(320.0f, 180.0f);
    CGSize fakeMomentarySize = CGSizeMake(currentSetSizeForPopover.width - 1.0f,    
           currentSetSizeForPopover.height - 1.0f);
    self.contentSizeForViewInPopover = fakeMomentarySize;
    self.contentSizeForViewInPopover = currentSetSizeForPopover;
}
于 2013-01-04T21:24:55.770 に答える