0

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

- (void)layoutSubviews現在、UITableViewCell サブクラスのメソッドをオーバーライドすることでこれを実現しています。基本的に、iPad と iPhone の横長と縦長の比率をハードコーディングするだけです。ただし、これは、方向の変更に比例してグリッド自体のサイズが変更される場合にのみ機能し、常にそうであるとは限りません。

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

4

1 に答える 1

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
于 2012-01-24T23:53:52.563 に答える