UILabel
に質問があり、に複数の選択肢の回答が表示されるアプリを作成していUITableView
ます。各行には複数の選択肢が表示されます。質問と回答はさまざまであるためUITableView
、高さを動的にする必要があります。
sizeToFit
テーブルの回避策を見つけたいと思います。テーブルのフレームがすべてのコンテンツの高さに設定されている場所。
これを達成する方法について誰かアドバイスできますか?
UILabel
に質問があり、に複数の選択肢の回答が表示されるアプリを作成していUITableView
ます。各行には複数の選択肢が表示されます。質問と回答はさまざまであるためUITableView
、高さを動的にする必要があります。
sizeToFit
テーブルの回避策を見つけたいと思います。テーブルのフレームがすべてのコンテンツの高さに設定されている場所。
これを達成する方法について誰かアドバイスできますか?
実際、私は自分で答えを見つけました。
の を使用して新しいCGRect
を作成tableView.frame
するだけheight
ですtable.contentSize.height
これにより、 の高さがコンテンツの に設定さUITableView
れheight
ます。コードは 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;
});
迅速なソリューション
次の手順を実行します:
ストーリーボードからテーブルの高さの制約を設定します。
高さの制約をストーリーボードからドラッグ@IBOutlet
し、View Controller ファイルに作成します。
@IBOutlet var tableHeight: NSLayoutConstraint!
次に、次のコードを使用してテーブルの高さを動的に変更できます。
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()
}
iOS 7でこれを試してみましたが、うまくいきました
- (void)viewDidLoad
{
[super viewDidLoad];
[self.tableView sizeToFit];
}
テーブル ビューに 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;
}
これがあなたを助けることを願っています。
contentSize が正しくない場合は、推定されたRowHeight (自動) に基づいているため、前にこれを使用してください
tableView.estimatedRowHeight = 0;
テーブルを動的にしたい場合は、上記のテーブルの内容に基づいたソリューションを使用する必要があります。単純に小さいテーブルを表示したい場合は、コンテナー ビューを使用して UITableViewController を埋め込むことができます。UITableView はコンテナーのサイズに応じてサイズ変更されます。
これにより、多くの計算とレイアウトの呼び出しが回避されます。