3

これは私のxibファイルです:

ここに画像の説明を入力

ご覧のとおりUITableViewtableHeaderView(オレンジ色)があります!UILabel通常は「..」で切り取られるよりも、タイトル ラベルに複数の行がある場合を除いて、実行時にすべてが正しく表示されます。すでにnumberOfLinesを 0に変更しました。

私は問題がtableHeaderView全体の高さであることを認識しました! これは、コードで高さを計算する方法です:

[self.headerView setNeedsLayout];
[self.headerView layoutIfNeeded];

CGFloat height = [self.headerView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height + self.headerView.frame.origin.y;

CGRect headerFrame = self.headerView.frame;
headerFrame.size.height = height;
self.headerView.frame = headerFrame;

[self.tableView setTableHeaderView:self.headerView];

しかし、実行時に tableHeaderView が小さすぎて 2 つ、3 つ、または 4 つを表示するには... タイトル ラベルの行。問題は何ですか?

4

2 に答える 2

1

比較的小さな静的コンテンツを含むように設計された tableview ヘッダーにコンテンツを収めようとしていると思います。

テーブルビューがオレンジ色のビューの下部にとどまり、オレンジ色のビューがテーブルビューと一緒にスクロールする(つまり、常に画面の上部にとどまらない)ことが必要であると仮定すると、スクロールビューの親を追加しますオレンジ色のビューとテーブルビューの両方を表示し、テーブルビューのスクロール機能を無効にします。

ただし、これは UITableViewController を UIViewController に交換することを意味します。

例えば。

-- UIScrollView
  |
  -- UIView (orange view)
  | |
  | -- subview 1
  | -- subview 2
  | -- etc.
  |
  -- UITableView (scrollEnabled = NO)

AutoLayout を使用すると、コンテンツに合わせてオレンジ色のビューを自動的にサイズ変更し、UITableView を「押し下げる」ことができます。ユーザーが垂直方向にスワイプすると、ルート スクロールビューがイベントをキャッチし、それに応じて全体 (orangeView + tableView) をスクロールし、オレンジ色のビューがテーブル ビュー ヘッダーであるかのように同じ効果をもたらします。

于 2015-01-12T12:02:28.980 に答える
0

tableHeaderView の高さを動的に設定する

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()

    if let headerView = tableView.tableHeaderView {

        let height = headerView.systemLayoutSizeFitting(UIView.layoutFittingCompressedSize).height
        var headerFrame = headerView.frame

        //Comparison necessary to avoid infinite loop
        if height != headerFrame.size.height {
            headerFrame.size.height = height
            headerView.frame = headerFrame
            tableView.tableHeaderView = headerView
        }
    }
}

投稿: https://newbedev.com/setting-tableheaderview-height-dynamically

于 2021-11-10T22:16:41.183 に答える