轉自:http://www.itstrike.cn/Question/3a52cc4a-db02-4121-b92e-14ff7cce1ade.html
我一直在尋找如何將自動布局添加到 UITableView 一個清晰的答案。到目前為止,My Code看起來如下:
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
UINib *nib = [UINib nibWithNibName:@"HomeHeaderView" bundle:nil];
UIView *headerView = (UIView *)[nib instantiateWithOwner:self options:nil][0];
[headerView.layer setCornerRadius:6.0];
[headerView setTranslatesAutoresizingMaskIntoConstraints:NO];
// NSDictionary *viewsDictionary = NSDictionaryOfVariableBindings(headerView);
// NSMutableArray *headerConstraints = [[NSMutableArray alloc] init];
// [headerConstraints addObject:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[headerView]-|" options:0 metrics:nil views:viewsDictionary]];
// [headerConstraints addObject:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-[headerView]-|" options:0 metrics:nil views:viewsDictionary]];
// [self.actionsTableView addConstraints:headerConstraints];
// [self.view addSubview:headerView];
tableView.tableHeaderView = headerView;
[headerView layoutSubviews];
NSLayoutConstraint *centerX = [NSLayoutConstraint constraintWithItem:headerView attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeCenterX multiplier:1 constant:0];
NSLayoutConstraint *centerY = [NSLayoutConstraint constraintWithItem:headerView attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeCenterY multiplier:1 constant:0];
NSLayoutConstraint *width = [NSLayoutConstraint constraintWithItem:headerView attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:nil attribute:0 multiplier:1 constant:300];
NSLayoutConstraint *height = [NSLayoutConstraint constraintWithItem:headerView attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:0 multiplier:1 constant:90];
[self.view addConstraints:@[centerX, centerY, width, height]];
return headerView;
}
我基本上有一個 nib 檔我頭的觀點和我想要置中那筆尖在我 UITableViewHeader。希望成長和相應地收縮在縱向和橫向方向。我真的不能確定,如果正確設定約束。不確信如果我 toItem 本來應該是視圖控制器視圖或串連本身。
我也不知道是否我本來要將 headerview 作為子視圖添加到任一視圖控制器的視圖或串連本身。
或者,我不確定如果設定 tableView.tableHeaderView = headerView 是足夠的。
我真的完全不知道這樣的事情是什麼的最佳做法。我不確定如果這一切可以在 IB 以及。目前,用您看到此錯誤的代碼:
'Auto Layout still required after executing -layoutSubviews. UITableView's implementation of -layoutSubviews needs to call super.'
正是由於這一錯誤,添加[headerView layoutSubviews]
對此的想法嗎。先謝謝了! 解決方案 1:
真正的問題是你混淆 viewForHeaderInSection: 與表中的 headerView 。它們是無關的。
前者是一節的頁首。你從委託方法返回的視圖。
後者是表的標題。您可能在設定視圖,您 viewDidLoad 。
在以正常方式操作約束。但他們應該只是他們個子視圖內部限制。在你建立它時,不是在視圖中您的介面。其大小和位置不取決於你在這段時間。如果是節標題,它將會自動調整大小以適合正確 (根據表格的寬度和標題的高度表的或委託的聲明)。如果它是表頭,你可以把它的絕對高度,但它的寬度將調整大小以適合正確。
這裡是一個完整的樣本的構建與它的子視圖上的內部約束節標題。
- (UIView *)tableView:(UITableView *)tableView
viewForHeaderInSection:(NSInteger)section {
UITableViewHeaderFooterView* h =
[tableView dequeueReusableHeaderFooterViewWithIdentifier:@"Header"];
if (![h.tintColor isEqual: [UIColor redColor]]) {
h.tintColor = [UIColor redColor];
h.backgroundView = [UIView new];
h.backgroundView.backgroundColor =