使用自动布局计算 tableHeaderView 高度
Calculate tableHeaderView height with autolayout
这是我的 xib 文件:
如您所见,我有一个 UITableView
和一个 tableHeaderView
(橙色)!在运行时一切都显示正确,除非标题标签有多行,而不是 UILabel
被典型的“..”截断。我已经将 numberOfLines
更改为 0!
我认识到问题是整个tableHeaderView 的高度!这就是我在代码中计算高度的方式:
[self.headerView setNeedsLayout];
[self.headerView layoutIfNeeded];
CGFloat height = [self.headerView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height + self.headerView.frame.origin.y;
CGRect headerFrame = self.headerView.frame;
headerFrame.size.height = height;
self.headerView.frame = headerFrame;
[self.tableView setTableHeaderView:self.headerView];
但在运行时,tableHeaderView 太小,无法显示 2 或 3 或 4...行的标题标签。可能是什么问题?
我认为您过于努力地让您的内容适合 table 视图 header,该视图旨在包含相对较小的 static 内容。
假设您想要 table 视图停留在橙色视图的底部,并且橙色视图随 table 视图滚动(即不停留在顶部屏幕),我会添加橙色视图和 table 视图的滚动视图 parent,并禁用 table 视图滚动功能。
这意味着将 UITableViewController 换成 UIViewController。
例如
-- UIScrollView
|
-- UIView (orange view)
| |
| -- subview 1
| -- subview 2
| -- etc.
|
-- UITableView (scrollEnabled = NO)
使用 AutoLayout,您可以使橙色视图自动调整大小以适合其内容,这将 "push" UITableView 缩小。
当用户垂直滑动时,根滚动视图将捕获事件,并相应地滚动整个 (orangeView + tableView),产生与橙色视图相同的效果,就好像橙色视图是 table 视图 header.
动态设置 tableHeaderView 高度
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
if let headerView = tableView.tableHeaderView {
let height = headerView.systemLayoutSizeFitting(UIView.layoutFittingCompressedSize).height
var headerFrame = headerView.frame
//Comparison necessary to avoid infinite loop
if height != headerFrame.size.height {
headerFrame.size.height = height
headerView.frame = headerFrame
tableView.tableHeaderView = headerView
}
}
}
post: https://newbedev.com/setting-tableheaderview-height-dynamically
这是我的 xib 文件:
如您所见,我有一个 UITableView
和一个 tableHeaderView
(橙色)!在运行时一切都显示正确,除非标题标签有多行,而不是 UILabel
被典型的“..”截断。我已经将 numberOfLines
更改为 0!
我认识到问题是整个tableHeaderView 的高度!这就是我在代码中计算高度的方式:
[self.headerView setNeedsLayout];
[self.headerView layoutIfNeeded];
CGFloat height = [self.headerView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height + self.headerView.frame.origin.y;
CGRect headerFrame = self.headerView.frame;
headerFrame.size.height = height;
self.headerView.frame = headerFrame;
[self.tableView setTableHeaderView:self.headerView];
但在运行时,tableHeaderView 太小,无法显示 2 或 3 或 4...行的标题标签。可能是什么问题?
我认为您过于努力地让您的内容适合 table 视图 header,该视图旨在包含相对较小的 static 内容。
假设您想要 table 视图停留在橙色视图的底部,并且橙色视图随 table 视图滚动(即不停留在顶部屏幕),我会添加橙色视图和 table 视图的滚动视图 parent,并禁用 table 视图滚动功能。
这意味着将 UITableViewController 换成 UIViewController。
例如
-- UIScrollView
|
-- UIView (orange view)
| |
| -- subview 1
| -- subview 2
| -- etc.
|
-- UITableView (scrollEnabled = NO)
使用 AutoLayout,您可以使橙色视图自动调整大小以适合其内容,这将 "push" UITableView 缩小。 当用户垂直滑动时,根滚动视图将捕获事件,并相应地滚动整个 (orangeView + tableView),产生与橙色视图相同的效果,就好像橙色视图是 table 视图 header.
动态设置 tableHeaderView 高度
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
if let headerView = tableView.tableHeaderView {
let height = headerView.systemLayoutSizeFitting(UIView.layoutFittingCompressedSize).height
var headerFrame = headerView.frame
//Comparison necessary to avoid infinite loop
if height != headerFrame.size.height {
headerFrame.size.height = height
headerView.frame = headerFrame
tableView.tableHeaderView = headerView
}
}
}
post: https://newbedev.com/setting-tableheaderview-height-dynamically