如何解决如何快速访问maintableviewcell中的内部tableviewcell的高度
我是新手,我无法访问主UITableviewCell中UITableviewCell内部的高度。
在我的主tableviewcell中,我在cellforrowatindexpath中的代码是这样的
cell.constraintHeightOfTblView.constant = CGFloat(135 * (cell.arrCourses.count))
我创建了内部tableview的高度约束,并根据数组的数量将其相乘。 有用。但是,如果单元格中的数据增加,则不能正确设置高度,因为我在此处定义了静态高度。 所以我想要内部tableviewcell的高度,以便它可以正常工作。 我可以访问它吗? 请帮忙 预先感谢!
我要接受这个
但是随着insidetableviewcell内容的增加,我得到了这个
内部tableviewcell正在滚动,我不希望内部tableview单元以不同的方式滚动。
解决方法
目的是为了提供一个tableview高度适合其内容大小并停止滚动。
以前,这是通过在tableView上使用高度限制来实现的。
如果您的tableView是在Storyboard或xib中的步骤:
- 创建一个名为SelfSizedTableView的快速文件。
- 提供 SelfSizedTableView到Storyboard或xib内部的tableView。
- 无需为tableView提供高度限制。
- 只需转到尺寸检查器,然后底部设置本征 调整大小至占位符,而无需选中高度和宽度复选框。
如果您的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的“大小”检查器中取消对“行高”和“估计”的自动检查框,如下所示:
您可以使用Tableview内部的IBOutlet并从insideTableView.bounds.height之类的边界中获取高度
如果您需要主tableview的单元格高度,则可以尝试获取像mainTableView.rowHeight或mainTableView.estimatedRowHeight一样的
如果您不希望在内部Table视图中滚动,则可以通过取消选中Attribute Inspector中的Scrolling来禁用滚动
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。