1

みなさん、私は TableHeaderView を持っていて、すべてが Autolayout によって管理されます:

  • 上部はUIImageView常に 2:1 にする必要があるため、アスペクト比と残りの必要な制約を設定します。

  • 4UIButtonsは常に水平で、高さと幅が同じである必要があります。だから私は等幅と等高さ、そしてアスペクト比1:1で作業しました

  • そして、私は 0 に設定された 2 つUILabelsを持っています。また、 のために、次のようにnumberOfLinesのサブクラスを作成しました。UILabelpreferredMaxLayoutWidth

    - (void) layoutSubviews
    {
    [super layoutSubviews];
    
    if ( self.numberOfLines == 0 )
    {
    if ( self.preferredMaxLayoutWidth != self.frame.size.width )
    {
        self.preferredMaxLayoutWidth = self.frame.size.width;
        [self setNeedsUpdateConstraints];
     }
     }
    }
    

これは私のコードです:

- (void)initializeHeaderViewLabels
{
 //After the Response from my server arrived i set the tableHeaderView with the Textdata
self.tableView.tableHeaderView = nil;

if((self.contentDict[@"title"]) != [NSNull null])
{
    self.headerTitleLabel.text = (self.contentDict[@"title"]);
}

if((self.contentDict[@"shortDescription"]) != [NSNull null])
{
    self.headerDescriptionLabel.text = (self.contentDict[@"shortDescription"]);
}

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

CGFloat height = [self.headerView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height;

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

[self.tableView setTableHeaderView:self.headerView];

}

サーバーからの画像とテキストを取得するUILabelsので、応答が到着するまで待たなければならず、それから を呼び出しますinitializeHeaderViewLabels

**私の問題は、実行時にtableHeaderViewが大きすぎるため、UILabelsが引き伸ばされ、空白がたくさんあることです。多分私は何かが恋しいですか?

4

5 に答える 5

6

それを機能させるには、いくつかの魔法が必要になるか、テーブル ヘッダー ビューから移行する必要があります。ここで同様の質問にすでに回答しています。tableHeaderView秘訣は、自動レイアウトを介して高さを評価した後、魔法のようにリセットすることです。そのためのサンプル プロジェクトを作成しました: TableHeaderView+Autolayout

于 2015-04-30T09:23:51.930 に答える
1

以下の解決策を試してください

- (void)sizeHeaderToFit
{
    UIView *header = self.tableView.tableHeaderView;

    [header setNeedsLayout];
    [header layoutIfNeeded];

    CGFloat height = [header systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height;
    CGRect frame = header.frame;

    frame.size.height = height;
    header.frame = frame;

    self.tableView.tableHeaderView = header;
}

ソース:

自動レイアウト、IB、およびフォント サイズを使用すると、テーブル ヘッダー ビューの高さが正しくない

以下の質問も参照してください...!

autolayout で tableHeaderView (UITableView) の高さを設定するにはどうすればよいですか?

于 2015-04-30T09:43:58.920 に答える
0

私の問題は、いくつかのフレーム値をスーパービュー フレーム値にマッピングするヘッダー ビューに制約を設定していたことです。制約を削除してフレームを直接設定すると、すべてが機能しました。

于 2016-09-28T11:50:25.743 に答える
-3

ヘッダー ビューの高さは、テーブル ビュー デリゲートで設定されます。デフォルトでは、インターフェイス ビルダーの幅が 600 であるため、アプリで実行すると大きすぎるインターフェイス ビルダーと同じサイズです。

したがって、必要なのは、このメソッドを実装することですUITableViewDelegate

func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
    return 200.0 // Set the desired height based on your device or what ever you are using.
}

そしてObjective-Cバージョン:

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
    return 200.0f;
}
于 2015-04-27T19:40:47.957 に答える