0

を使用して UIView にデータのグリッドを描画していdrawRectますが、列と行の数が動的であるため、UIView が作成されたときの最終的なサイズはわかりません。確かに、UIView を作成する前に計算を行うことはできますが、UIView サブクラスでもこれらの計算を行い、それを抽出する必要がないため、実際には意味がありません。

では、どうすればこれを処理できますか?非常に大きなフレームで初期化し、drawRect の実行後に調整する必要がありますか?

また、割り当てられた領域で表示するには大きすぎる場合に備えて、このビューを UIScrollView のコンテンツとして設定します。

これから描くビューは次のようになります。価格表

4

2 に答える 2

0

おそらく他の人には別の解決策がありますが、あなたの場合は setFrame: をオーバーライドして setNeedsDisplay を呼び出し、フレームが変更された後に drawRect が呼び出されるようにすると思います。すでにこのアプローチを試しましたか?

于 2012-04-03T21:12:15.440 に答える
-1
  • データに基づいて、ビューの大きさを決定するメソッドをビューに追加します。これは、とは別にする必要がありますdrawRect:
  • ビューコントローラで、ビューを設定するときに、そのメソッドを呼び出してそのサイズを取得します。
  • 次に、ビューの境界やフレームをそのサイズに設定します。
  • また、スクロールビューcontentSizeをそのサイズに設定します。

重要な概念は次のとおりです。「ビューの内容を決定する」と「ビューの内容を描画する」の概念を分離します。現在、描画中にサイズの計算を行っていますが、それよりも早く実行できる必要があります。

ファンシーになりたい場合layoutSubviewsは、ビューのスーパービューでオーバーライドを調べることができます。これは、ビューの目的のサイズが変更されたかどうかを確認してから、ビューのサイズとスクロールビューのを更新するのに適した場所contentSizeです。ただし、開始するためにそれを行う必要はありません。

于 2012-04-04T04:44:30.843 に答える