gpt4 book ai didi

ios - 如何在 Swift 的 maintableviewcell 中访问内部 tableviewcell 的高度

转载 作者:行者123 更新时间:2023-12-01 15:40:25 25 4
gpt4 key购买 nike

我是 Swift 的新手,我无法访问主 UITableviewCell 中 UITableviewCell 内部的高度。

在我的主 tableviewcell 中,我在 cellforrowatindexpath 中的代码是这样的:

cell.constraintHeightOfTblView.constant = CGFloat(135 * (cell.arrCourses.count))

我创建了内部 tableview 的高度约束,并根据数组的计数将其相乘。有用。但是,如果单元格中的数据增加,则无法获得正确的高度,因为我在此处定义了静态高度。

所以我想要内部 tableviewcell 高度,以便它可以正常工作。我可以访问它吗?

我想实现这个:

enter image description here

但随着 insidetableviewcell 的内容增加,我得到了这个

enter image description here

内部 tableviewcell 正在滚动我不希望内部 tableview 单元格以不同方式滚动。

最佳答案

此代码的目的是为 tableView 提供适合其内容大小的高度并停止滚动。

以前,这是通过对 tableView 使用高度约束来实现的。

如果您的 tableView 在 Storyboard 或 xib 中,请执行以下步骤:

  1. 创建一个名为 SelfSizedTableView 的 swift 文件。
  2. SelfSizedTableView 提供给 Storyboard 或 xib 中的 tableView。
  3. 无需为tableView提供高度限制。
  4. 只需转到 Size Inspector 到底部并设置 Intrinsic大小为占位符,不勾选高度和宽度框。

如果您的 tableView 是以编程方式创建的,请确保它是 SelfSizedTableView 的子级。

import UIKit

class SelfSizedTableView: UITableView {

/*
// Only override draw() if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
override func draw(_ rect: CGRect) {
// Drawing code
}
*/

func defaultSetup() {
// do something here
}

override open func awakeFromNib() {
super.awakeFromNib()
// Initialization code
defaultSetup()
}

override init(frame: CGRect, style: UITableView.Style) {
super.init(frame: frame, style: style)
defaultSetup()
}

required public init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
defaultSetup()
}

/// set a value to maxHeight if you want tableView to scroll after a specific height
/// e.g. when contentSize.height > maxHeight
/// table view will start to scroll

var maxHeight: CGFloat?

/// set a value to minHeight if you want tableView to avoid scroll before specific height
/// e.g. when contentSize.height > minHeight
/// table view will start to scroll

var minHeight: CGFloat?

override func reloadData() {
super.reloadData()
self.invalidateIntrinsicContentSize()
self.layoutIfNeeded()
}

override var intrinsicContentSize: CGSize {
let height: CGFloat

if let maxHeight = maxHeight {
height = min(contentSize.height, maxHeight)
}
else if let minHeight = minHeight {
height = max(contentSize.height, minHeight)
}
else {
height = contentSize.height
}

return CGSize(width: contentSize.width, height: height)
}

override func layoutSubviews() {
super.layoutSubviews()
invalidateIntrinsicContentSize()
}

关于ios - 如何在 Swift 的 maintableviewcell 中访问内部 tableviewcell 的高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63393358/

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