tableHeaderView 使用自动布局和情节提要以全高显示

tableHeaderView displays with full height using auto layout and storyboard

更新

我无法重现从头开始新项目时遇到的问题。 tableHeaderView 的高度始终与我在情节提要中的高度相匹配。但是,如果我将故事板复制到一个全新的项目中并将其设置为主故事板,则可以看到问题。

你可以在这里下载我的测试项目:

https://www.dropbox.com/sh/k5kc4syk563mm5y/AAAct3YbNp_S133rt7-iaftia?dl=0


在故事板中,我有一个 UIViewController 和一个 UITableView。我将 UIVIew(紫色视图)拖放到 table 视图之上,Xcode 自动为我生成了一个 tableHeaderView

当我构建 运行 时,tableHeaderView 占据了整个屏幕。

如果我 NSLog 在 iPhone 6 上 viewDidAppear 中的 tableHeaderView 框架,我得到 {{0, 0}, {320, 568}}

如果你有多行标签,有很多关于重置 tableHeaderView 的 SO Q/A,建议使用 systemLayoutSizeFittingSize: API:

- (void)viewDidLayoutSubviews
{
    [super viewDidLayoutSubviews];

    UIView *headerView = self.tableHeaderView;

    [headerView setNeedsLayout];
    [headerView layoutIfNeeded];
    CGFloat height = [headerView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height;
    NSLog(@"height: %@", @(height));

    headerView.frame = ({
        CGRect headerFrame = headerView.frame;
        headerFrame.size.height = height;
        headerFrame;
    });

    self.tableHeaderView = headerView;

}

我已经试过了,a) 这甚至对我不起作用,因为 height 最终为 0,并且 b) 在这一点上我只是想打印出我的虚拟标签,具有固定高度。

如何在故事板中配置我的 tableHeaderView,以便在设备上 运行ning 时高度显示相似?

不幸的是,我认为问题的根源是损坏的故事板。有不同的方法来解决这个问题(none 其中最理想的),比如删除并重新创建视图控制器,或者甚至破坏故事板并重新开始。

我遇到了同样的问题。如何在 header 中创建 UIView 的 IBOutlet 并从那里分配高度?

 @IBOutlet weak var layerView: UIView!

然后在视图中加载

layerView.frame = CGRectMake(0, 0, self.tableView.bounds.width, 200)

我在我的项目中遇到了同样的问题。我使用文本编辑器直接更改了故事板文件。而且,问题解决了。

就像@Jaques 的回答一样,我不得不手动编辑 tableHeaderView 的高度 属性 以达到我想要的高度。这一定是情节提要中的错误。

我在 TextEdit 中搜索了 "tableHeaderView"。

tableView.tableHeaderView = UIView(frame: CGRect(x: 0, y: 0, width: 0, height: 200))
        tableView.tableHeaderView?.addSubview(outletTableHeaderView)