15

UITableViewController を使用する場合、initWithStyle: メソッドは、基礎となる UITableView を (ドキュメントによると) 「正しい寸法」で自動的に作成します。

私の問題は、これらの「正しい寸法」が 320x460 (iPhone の画面サイズ) のように見えることですが、この TableView/Controller ペアを、それ自体が UIView に含まれている UINavigationController にプッシュしています。これは、画面の高さの約半分です。

私が思いつくことができるフレームや境界のラングリングは、テーブルのサイズを正しくリセットしていないようです。そのため、「長すぎます」。つまり、画面の下部から押し出され、表示も到達もできない行のコレクションがあることを意味します。スクロール。

だから私の質問は次のようになります: UITableViewController にそのコンポーネント UITableView のサイズを指定された長方形に変更するように指示する適切な方法は何ですか?

ありがとう!

更新ここで提案されているすべての手法を試してみましたが、役に立たなかったのですが、興味深いことが1つ見つかりました.私が言及した囲んでいるビューの直接のサブビューとしてのテーブルビューでは、指定されたフレームサイズが尊重されます。UINavigationController をテーブル ビューの前または後にサブビューとして追加するかどうかに関係なく、テーブル ビューがサブビューとして追加される前または後に alloc/init するかに関係なく、ミックスに UINavigationController を再導入した瞬間結果は以前と同じ。

私は、UINavigationController があまりチーム プレーヤーではないのではないかと疑い始めています...

更新 2画面上のテーブル ビューの後にフレーム サイズを確認するという提案は適切なものでした。実際には、ナビゲーション コントローラーが読み込みと表示の間にサイズを変更していることがわかりました。私の解決策は、せいぜいハックですが、ロード時に指定されたフレームをキャッシュし、tableView:cellForRowAtIndexPath: の先頭で変更された場合はリセットすることでした。なぜそこに尋ねるのですか?それが私が見つけた唯一の場所だからです。

明らかに不適切であるため、これを解決策とは考えていませんが、他の誰かが読んでいるためには、うまくいくようです。

4

11 に答える 11

11

通常の UIViewController を使用してテーブルを手動で作成しないのはなぜですか?

于 2008-10-21T18:38:58.720 に答える
3

同じ問題があり、UITableViewController の viewDidAppear 関数で tableView のサイズを変更して解決しました。理想的なソリューションではありませんが、機能します。

于 2009-05-01T10:30:51.920 に答える
2

次を使用して上マージンを設定できます。

    UIEdgeInsets inset = UIEdgeInsetsMake(50, 0, 0, 0);
    self.tableView.contentInset = inset;

それは良い習慣ではありません、あなたがそれを使うことができるより多くのスペースが欲しい場合に備えて。

UITableViewControllerを使用しないでください。UIViewControllerを使用してプログラムでUITableviewを作成するだけです。

于 2012-05-14T06:44:27.877 に答える
1

ベンの答えに同意します。ビュー上の他のコントロールが原因で UITableVIew のサイズを変更する必要がある状況によく遭遇します。

私は通常、UITableView IBOutlet を持つ通常の UIViewController を持っています。次に、必要に応じて、UITableView オブジェクトのフレームを操作して、必要なサイズにすることができます。

于 2008-10-21T18:45:33.963 に答える
1

UITableView の autoresizingMask および contentMode プロパティを確認してください。これらは両方ともフレームに影響を与える可能性があります。

于 2008-10-21T21:05:04.383 に答える
1

このコードでこの問題を修正しました

{
    UIEdgeInsets insets;
    insets.left = 0;
    insets.right = 0;
    insets.top = 0;
    insets.bottom = 60;
    self.tableView.contentInset = insets;
    [self.tableView setScrollIndicatorInsets:insets];
}
于 2014-04-16T05:07:09.510 に答える
1

テーブルに追加のビュー コントローラーを作成する理由がわかりません。ただし、コードでは、テーブル ビューをその親に追加していません。全体が画面に表示されるまで、境界の高さを減らしてみることもできます。これを行うと、期待どおりに機能しない理由についての洞察が得られる場合があります。

于 2008-10-21T19:22:15.637 に答える
0

試す:

self.edgesForExtendedLayout = UIRectEdgeNone;

//This one in case your NavigationController is not Translucent
self.extendedLayoutIncludesOpaqueBars = NO; 

お役に立てれば。

于 2013-09-26T19:51:31.773 に答える
0

Interface Builder を使用している場合は、「Table View Size」プロパティ ウィンドウに移動し、別のウィジェットの高さで Content と Scroller の両方の Bottom Insets を変更するだけです。

于 2008-10-23T17:53:23.490 に答える
-2

でフレームをセットしUINavigationControllerます。

于 2012-06-14T04:58:25.157 に答える