2012-03-14 17 views
0

テーブルの幅を2、3、5、...等しくする必要があります。目的は、2、3、5、...等しいサイズの正方形のサブビューを持つ表のセルを塗りつぶすことです。 (画像) もちろん、テーブルの高さはそれに依存します。iPadのUITableViewのサイズを調べる

これは、テーブルのサイズを決定する方法で、配置するイメージの数で割ります。 numberOfPicsPerRowメソッドは、ユーザーがテーブルの各行に表示することを選択したイメージの数の整数値を返します。

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    self.tableView.rowHeight = [self rowHeight]; 

} 

すべてがiPhone上で正常に動作します:私は初めてのテーブルの行の高さを設定する場所

- (CGFloat) rowHeight{ 

    fcAppAppDelegate *delegate = (fcAppAppDelegate *); 

    CGRect  bounds = self.tableView.bounds; 
    //CGRect   bounds = self.view.bounds; // Alternative that returns the same result. 
    float  tableWidth; 
    if (UIInterfaceOrientationIsPortrait([[UIApplication sharedApplication] delegate].tabBarController.interfaceOrientation)) 
     tableWidth = bounds.size.width; 
    else 
     tableWidth = bounds.size.height; 

    NSLog (@"tableWidth: %f", tableWidth); 
    return tableWidth/[MatrixPhotoListTVC noOfPicsPerRow]; 
} 

です。ただし、iPadではtableView.boundsまたはview.boundsが返されます(width = 320、heiht = 372)。興味深いことに、この値は、デバイスを回転させたときに正しい値になります。 (幅= 768、高さ= 960)

誰でも説明がありますか? viewDidLoadはテーブルのサイズを決定するのに適切な場所ではありませんか?

答えて

0

これについて語る - この場合は質問を書く - すべての違いがあります。

しかし、他の人にも同様のことが起こる可能性があるため、私はシステムに質問を残しています。これは答えです:

viewDidLoadはビューがlodedされた後immediatleyと呼ばれます。これは、ほとんどの場合、Nibファイルからロードされたことを意味します。私が使っていたnibファイルは、iPhone用にのみ設計されていて、iPad用のものではありません。 これは、ビューのディメンションがIBのものとまったく同じだからです。

私はviewDidLoadからviewWillAppearへの呼び出しを移動し、正常に動作します。明らかに、iOSは自動的にviewDidLoadとviewWillAppearの呼び出しの間にiPad用のビューを自動的に再解析します(うまくいけば)。

誰かが私が電話をかけることができる学術的またはドキュメンテーション的な観点から、より良い場所を知っているなら、ヒントは高く評価されます。

しかし、今は正常に動作しているようです。

+0

あなたは右のそれをやっています。 'viewDidLoad:'ではビューがロードされたばかりで、サイズを含めてIBで作成したビューと同じです。次に、ビューがビュー階層に追加される前に、自動サイズ変更マスクに従ってリサイズされ、 'viewWillAppear:'が呼び出され、ビューが追加されます。そのため、 'viewDidLoad:'では、現在のビュー階層に対してディメンション*が正しいはずです。 – Pascal

0

テーブルビューで既にレイアウトが行われているため、コードをメソッド-viewWillAppearまたは-viewDidAppearに切り替えることにしました。

のUITableViewはメソッドをサブクラス化されたサブクラス化された場合に別の可能性:

- (void)layoutSubviews { 
    [super layoutSubviews]; 
    .... 
} 
+0

ありがとうございます。もう少し遅れていませんか?私は、標準値が適合しないので、tableViewの行の高さを設定しようとしています。 –

+0

あなたは正しいです - (空)viewDidLoadはそれのためのより良い場所です。私のコードにはカスタムUITableViewがあり、テーブルビューが再ロードされたときにレイアウトが必要なセルがあり、代わりに上記の方法を使用します。しかし、あなたがすでにUITableViewをサブクラス化している場合にのみ意味があります。可能であれば、コントローラーからすべてを管理する方法が必要です。与えられた最初の解決策よりも適切な選択肢ではなく、可能な限り私の答えを修正しました。 – Conor

関連する問題