197

UILabelに質問があり、に複数の選択肢の回答が表示されるアプリを作成していUITableViewます。各行には複数の選択肢が表示されます。質問と回答はさまざまであるためUITableView、高さを動的にする必要があります。

sizeToFitテーブルの回避策を見つけたいと思います。テーブルのフレームがすべてのコンテンツの高さに設定されている場所。

これを達成する方法について誰かアドバイスできますか?

4

23 に答える 23

166

実際、私は自分で答えを見つけました。

の を使用して新しいCGRectを作成tableView.frameするだけheightですtable.contentSize.height

これにより、 の高さがコンテンツの に設定さUITableViewheightます。コードは UI を変更するため、メイン スレッドで実行することを忘れないでください。

dispatch_async(dispatch_get_main_queue(), ^{
        //This code will run in the main thread:
        CGRect frame = self.tableView.frame;
        frame.size.height = self.tableView.contentSize.height;
        self.tableView.frame = frame;
    });
于 2010-04-07T19:29:24.643 に答える
110

迅速なソリューション

次の手順を実行します:

  1. ストーリーボードからテーブルの高さの制約を設定します。

  2. 高さの制約をストーリーボードからドラッグ@IBOutletし、View Controller ファイルに作成します。

    @IBOutlet var tableHeight: NSLayoutConstraint!
    
  3. 次に、次のコードを使用してテーブルの高さを動的に変更できます。

    override func viewWillLayoutSubviews() {
        super.updateViewConstraints()
        self.tableHeight?.constant = self.table.contentSize.height
    }
    

最後の行が切れている場合はviewWillLayoutSubviews()willDisplay cell関数を呼び出してみてください。

func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
    self.viewWillLayoutSubviews()
}
于 2016-09-27T15:33:46.563 に答える
21

iOS 7でこれを試してみましたが、うまくいきました

- (void)viewDidLoad
{
    [super viewDidLoad];
    [self.tableView sizeToFit];
}
于 2013-10-24T15:21:05.877 に答える
19

テーブル ビューに contentSize プロパティのオブザーバーを追加し、それに応じてフレーム サイズを調整します。

[your_tableview addObserver:self forKeyPath:@"contentSize" options:0 context:NULL];

次に、コールバックで:

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
    {
         CGRect frame = your_tableview.frame;
         frame.size = your_tableview.contentSize;
         your_tableview.frame = frame;
    }

これがあなたを助けることを願っています。

于 2014-08-21T05:15:03.227 に答える
6

contentSize が正しくない場合は、推定されたRowHeight (自動) に基づいているため、前にこれを使用してください

tableView.estimatedRowHeight = 0;

ソース: https://forums.developer.apple.com/thread/81895

于 2018-04-13T11:45:34.013 に答える
-1

テーブルを動的にしたい場合は、上記のテーブルの内容に基づいたソリューションを使用する必要があります。単純に小さいテーブルを表示したい場合は、コンテナー ビューを使用して UITableViewController を埋め込むことができます。UITableView はコンテナーのサイズに応じてサイズ変更されます。

これにより、多くの計算とレイアウトの呼び出しが回避されます。

于 2019-08-05T09:09:26.160 に答える