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)
更新
我无法重现从头开始新项目时遇到的问题。 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)