gpt4 book ai didi

ios - UITableView tableHeaderView 使用自动布局高度太小

转载 作者:行者123 更新时间:2023-11-28 21:55:29 25 4
gpt4 key购买 nike

我正在尝试使用 Storyboard使用自动布局创建一个带有标题 View 的 UITableView。它在 Xcode 中看起来不错,但当我运行应用程序时,它看起来不一样。

在 Xcode 中: enter image description here

在应用程序中: enter image description here

图片有150x150的约束,top-image、image-middle label、middle description-label和description label-bottom之间有8-high constraints。

两个标签都将 numberOfRows 设置为 0 并将 lineBreakMode 设置为 ByWordWrapping

我尝试通过以下方式设置框架:

if let headerView = self.tableView.tableHeaderView {
headerView.setNeedsLayout()
headerView.layoutIfNeeded()
let height = headerView.systemLayoutSizeFittingSize(UILayoutFittingCompressedSize).height
println("Setting height to \(height)")

var headerFrame = headerView.frame
headerFrame.size.height = height
headerView.frame = headerFrame
self.tableView.tableHeaderView = headerView
}

最初的问题之一是我有一些错误的约束(出于某种原因 Xcode 今天才开始提示),所以我删除了这些约束并将 contentHuggingPriority 设置为 252(高于所有其他)在应用程序名称标签上。当我在 Storyboard中手动调整标题 View 大小时,图像和应用程序名称标签保持相同的高度,并且描述标签增长。这些应用程序似乎在运行时使用 Storyboard 中标题的大小,而不是从其子项中获取高度。

最佳答案

在这里回答我自己的问题:

似乎有 2 个步骤可以让它发挥作用。第一个在 ViewDidLoad 中,第二个在 viewDidLayoutSubviews 中:

var headerView: UIView!

override func viewDidLoad() {
super.viewDidLoad()

if let currentTableHeaderView = self.tableView.tableHeaderView {
currentTableHeaderView.removeFromSuperview()
}
// Setting the table header view with a height of 0.01 fixes a bug that adds a gap between the
// tableHeaderView (once added) and the top row. See: http://stackoverflow.com/a/18938763/657676
self.tableView.tableHeaderView = UIView(frame: CGRectMake(0, 0, CGRectGetWidth(self.tableView.frame), 0.01))
self.headerView = AboutTableViewHeaderView(frame: CGRectZero)
}

override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
if let tableHeaderView = self.headerView {
var frame = CGRectZero
frame.size.width = self.tableView.bounds.size.width
frame.size.height = tableHeaderView.systemLayoutSizeFittingSize(UILayoutFittingCompressedSize).height
if self.tableView.tableHeaderView == nil || !CGRectEqualToRect(frame, tableHeaderView.frame) {
tableHeaderView.frame = frame
tableHeaderView.layoutIfNeeded()
self.tableView.tableHeaderView = tableHeaderView
}
}
}

希望一切都有意义。 viewDidLayoutSubview 代码来自 http://osdir.com/ml/general/2014-06/msg19399.html

关于ios - UITableView tableHeaderView 使用自动布局高度太小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26767331/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com