【发布时间】:2017-07-20 23:54:31
【问题描述】:
我有一个带有标题的TableViewController。
此标头是一个容器,它链接到另一个名为 Header.storyboard 的故事板
Header.storyboard 包含一个带有一些标签的堆栈视图,这些标签是动态类型的。
标签文本来自数据库。
不考虑文本尺寸或大小,我想正确地对其进行可视化。
我已经使用 SO 的一些答案来正确调整标题的大小,但没有运气:
import UIKit
class TableViewController: UITableViewController {
@IBOutlet weak var tableHeaderView: UIView!
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
// Dynamic sizing for the header view
if let headerView = tableHeaderView {
headerView.setNeedsLayout()
headerView.layoutIfNeeded()
let height = headerView.systemLayoutSizeFitting(UILayoutFittingCompressedSize).height
var headerFrame = headerView.frame
// If we don't have this check, viewDidLayoutSubviews() will get
// repeatedly, causing the app to hang.
if height != headerFrame.size.height {
headerFrame.size.height = height
headerView.frame = headerFrame
tableHeaderView = headerView
}
}
}
}
【问题讨论】:
-
你试过在 UITableViewDelegate 中的 func tableView(UITableView, heightForHeaderInSection: Int) 吗?
-
您的意思是它使用动态类型作为 Apple 技术(例如 UIFontTextStyle)还是您的意思是它们只是具有不同的字体大小?
-
@Alistra,我的意思是 Apple 定义的动态类型——
storyboard中使用的 UIFontTextStyle。当应用程序运行时,我想更改可访问性的字体,并且我想相应更改 tableHeader 的高度,以便文本可见 -
你有没有试过听标题上的
UIContentSizeCategoryDidChangeNotification和invalidateIntrinsicContentSize? -
从这个useyourloaf.com/blog/auto-adjusting-fonts-for-dynamic-type了解到“将adjustsFontsForContentSizeCategory设置为true会导致字体在用户更改文本内容大小时自动更新。您不再需要观察内容大小类别确实更改通知。”。我不知道在哪里打电话
invalidateIntrinsicContentSize
标签: swift xcode uitableview storyboard