如何快速访问maintableviewcell中的内部tableviewcell的高度

问题描述

我是新手,我无法访问主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的快速文件。
  2. 提供 SelfSizedTableView到Storyboard或xib内部的tableView。
  3. 无需为tableView提供高度限制。
  4. 只需转到尺寸检查器,然后底部设置本征 调整大小至占位符,而无需选中高度和宽度复选框。

如果您的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()
}

}

,

您可以尝试使用以下委托方法为tableView中的每一行提供高度:

func tableView(_ tableView: UITableView,heightForRowAt indexPath: IndexPath) -> CGFloat {
   // calculate the height and return.
}

func tableView(_ tableView: UITableView,estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {

}

还尝试在Tableview的“大小”检查器中取消对“行高”和“估计”的自动检查框,如下所示: enter image description here

您可以使用Tableview内部的IBOutlet并从insideTableView.bounds.height之类的边界中获取高度

如果您需要主tableview的单元格高度,则可以尝试获取像mainTableView.rowHeight或mainTableView.estimatedRowHeight一样的

如果您不希望在内部Table视图中滚动,则可以通过取消选中Attribute Inspector中的Scrolling来禁用滚动

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...