2

最近、モノタッチのiOSアプリの開発を始めました。私の質問は、レイアウトプロセスについてです。現在、私のすべてのスーパービューは、サブビューが取得するスペースの量を決定します。

override void LayoutSubviews()
{
    this.subview1.Frame = new RectangleF(new PointF(0,0), new SizeF(10, 10));
    this.subview2.Frame = new RectangleF(new PointF(0, 15), new SizeF(10, 10));
}

しかし今、私はUITableViewどの高さがコンテンツに依存するかを表示しようとしています。それで、私が特定の高さが必要であることをスーパービューに伝える正しい方法は何ですか?

ポップオーバーにを表示するのと同じ問題がありUITableViewます。UIPopoverControllerは別のUIViewControllerを受け取り、それをPopoverに表示します。UIPopoverController特定のサイズが必要であることを伝える適切な方法は何ですか?

4

3 に答える 3

0

これはそれほど難しいことではありません。

  • 親ビュー/ポップオーバーインスタンスをに渡しますUITableViewSource。これは、コンストラクタ、パブリックプロパティ、またはフィールドなどを介して行うことができます。
  • テーブルソース内の親コントロールのサイズフォームを変更する必要がある場合は、そのFrameまたはContentSizeプロパティにアクセスできる必要があります。

これで問題は解決しますか?

于 2013-03-16T18:10:07.217 に答える
0

UITableViewの場合、UITableViewSourceのGetHeightForRowメソッドをオーバーライドする必要があります。このメソッドは、レンダリングされる前にすべてのセルに対して実行され、その高さを返します。

したがって、セルアンダーレイデータソースまたはセルビューに基づいて高さを直接計算できます(NSpathプロパティによってテーブルから参照できます)

于 2013-03-19T15:11:29.280 に答える
0

私の問題を完全に解決したわけではありませんが、すべての回答に感謝します。しかし今、私は一緒に行くための解決策を得たと思います。

iOSは、ボトムアップレイアウトプロセスをネイティブにサポートしていません。したがって、階層の最上位にある要素は、レイアウトプロセスをトリガーし、そのサブビューにどのくらいの大きさにしたいかを尋ねる必要があります。したがって、新しいデータがビジネスモデルからのものである場合、ViewControllerは最初にそれを処理してから、データを表示するtableViewにプッシュする必要があります。その後、彼はレイアウトプロセスをトリガーし、スクロールせずにすべてのデータを表示するために必要なサイズをtableViewに要求します(ContentSizeプロパティを介して必要なサイズを取得できます)。

私も知らなかったのは、ビューコントローラーがポップオーバーで表示されるのに必要なサイズの特別なプロパティがあるということですContentSizeForViewInPopover。iOSに統合されたメカニズムがあり、プロパティに加えられた変更を聞くことができます。PopoverControllerは、このプロパティに加えられた変更をリッスンし、このサイズに合わせて自動的にサイズを変更します。したがって、ContentViewControllerで行う必要があるのは、ContentSizeForViewInPopoverプロパティの値を設定することだけで、PopoverControllerは自動的にサイズ変更されます。

于 2013-03-24T13:48:47.343 に答える