AutoLayout
どこでも使用できることを発見したので、今はtableHeaderView
.
必要なものすべて (ラベルなど...) を制約付きで作成し、これを'subclass
に追加しました。UIView
CustomView
UITableView
tableHeaderView
UITableView
が常に の上に表示されることをCustomView
除いて、CustomView
すべて正常に機能しUITableView
ます。
私が何をしてheight
も、UITableView
'tableHeaderView
は常に0 のようです (幅、x、y も同様です)。
私の質問:フレームを手動で設定せずにこれを達成することはまったく可能ですか?
編集:私が使用しているCustomView
'には、次
の制約があります。subview
_title = [[UILabel alloc]init];
_title.text = @"Title";
[self addSubview:_title];
[_title keep:[KeepTopInset rules:@[[KeepEqual must:5]]]]; // title has to stay at least 5 away from the supperview Top
[_title keep:[KeepRightInset rules:@[[KeepMin must:5]]]];
[_title keep:[KeepLeftInset rules:@[[KeepMin must:5]]]];
[_title keep:[KeepBottomInset rules:@[[KeepMin must:5]]]];
便利なライブラリ「KeepLayout」を使用しています。制約を手動で記述すると、1 つの制約に対して非常に多くの行が必要になりますが、メソッドは自明です。
にUITableView
は次の制約があります。
_tableView = [[UITableView alloc]init];
_tableView.translatesAutoresizingMaskIntoConstraints = NO;
_tableView.delegate = self;
_tableView.dataSource = self;
_tableView.backgroundColor = [UIColor clearColor];
[self.view addSubview:_tableView];
[_tableView keep:[KeepTopInset rules:@[[KeepEqual must:0]]]];// These 4 constraints make the UITableView stays 0 away from the superview top left right and bottom.
[_tableView keep:[KeepLeftInset rules:@[[KeepEqual must:0]]]];
[_tableView keep:[KeepRightInset rules:@[[KeepEqual must:0]]]];
[_tableView keep:[KeepBottomInset rules:@[[KeepEqual must:0]]]];
_detailsView = [[CustomView alloc]init];
_tableView.tableHeaderView = _detailsView;
に直接制約を設定する必要があるかどうかはわかりませんCustomView
。CustomView の高さは、その中のUILabel
「タイトル」の制約によって決定されると思います。
編集 2:別の調査の後、CustomView の高さと幅が正しく計算されているようですが、CustomView の上部は UITableView の上部と同じレベルにあり、スクロールすると一緒に移動します。