2011-12-16 4 views
0

私はiOSアプリケーション用にグリッド(.NETのDataGridViewと考える)を実装しようとしています。私はその行のデータの各列を表すいくつかのラベルを持つカスタムUITableViewCellサブクラスでUITableViewを使用しています。私の質問は、デバイスの向きが変更された後、それらのラベルの幅を変更することに関係しています。私は基本的に縦横比を変えたいと思っています。たとえば、縦向きでグリッド幅の1/3を占める列は、横向きに切り替えたときに幅の1/3を占めることになります。自動サイズ変更マスクを使用するには、UITableViewCellサブクラスのサブビューをセットアップするにはどうすればよいですか?

今は私のUITableViewCellサブクラスの- (void)layoutSubviewsメソッドをオーバーライドすることでこれを実現しています。私は基本的にiPadとiPhoneの風景を縦横比にハードコードしています。しかし、これはグリッド自体がオリエンテーションの変更に比例してサイズ変更される場合にのみ機能しますが、必ずしもそうであるとは限りません。

どんな場合でもうまくいくソリューションを実現するために、私はlayoutSubviewsメソッドでself.bounds.size.widthを使用することを考えましたが、自動サイズ設定のマスクがより良い解決策であるように見えます。各UILabelのマスクをUIViewAutoResizingFlexibleWidth | UIViewAutoResizingFlexibleLeftMargin | UIViewAutoResizingFlexibleRightMarginに設定すると、私が探しているスケーリングのタイプを達成する必要があります。しかし、私が理解できないことは、各ラベルの初期フレームを設定する方法です。 layoutSubviewsが呼び出されるまでセルの開始範囲がわからない場合、どのように私のサブビューを配置することができますか?

答えて

0

self.contentView.bounds.sizeを計算の基礎として使用してください。たとえば:

int numberOfLabels = 3; 
CGFloat marginHorizontal = 10; 
CGFloat spacingHorizontal = 8; 
CGFloat totalWidth = cell.contentView.bounds.size.width; 
// That's how much is available to all labels 
CGFloat availableWidth = (totalWidth 
          - 2 * marginHorizontal 
          - (numberOfLabels - 1) * spacingHorizontal); 
// That's how much each label gets - initially! 
CGFloat labelWidth = availableWidth/numberOfLabels; 

は、コンテンツビューが最初だけ320それは後にリサイズされますの幅、およびそれを使用してラベルを持っていること、それはお邪魔させてはいけません。ところで

:あなたはおそらく左右の端にラベルの異なるマスクを指定する必要があります。

  • エッジ左:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleRightMargin
  • 右エッジ:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleLeftMargin
関連する問題