[ios]UITableView 標題上的自動布局

來源:互聯網
上載者:User

轉自: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 =
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.