【问题标题】:custom range slider hidden in table view隐藏在表格视图中的自定义范围滑块
【发布时间】:2019-08-03 06:40:28
【问题描述】:

我使用本教程在 iOS 项目中创建了一个自定义范围滑块:https://www.raywenderlich.com/7595-how-to-make-a-custom-control-tutorial-a-reusable-slider

使用 Xcode 10.1 和 Swift 4.2.1。

唯一的区别是,我删除了viewDidLayoutSubviews() 部分,因为我已经在情节提要中完成了它。这里我在故事板中放置了一个 UIView,设置了它的约束,将它的类设置为RangeSlider,并在视图控制器中创建了一个@IBOutlet weak var rangeSlider: RangeSlider!

我使用的是静态表格视图,但具有动态单元格高度:

override func viewDidLoad() {
    ...
    self.tableView.rowHeight = UITableView.automaticDimension
    self.tableView.estimatedRowHeight = 80.0
}
override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    return UITableView.automaticDimension
}

如果我更改字体大小,单元格的高度会得到调整,这正是我想要的,但不知何故,其中包含 rangeSlider 的单元格覆盖了 rangeSlider 的一半。我玩弄字体大小、旋转屏幕等都没关系。它总是被覆盖。

有人可以帮忙吗?我错过了什么吗?

【问题讨论】:

  • 由于UITableViewlCell 中没有字体,它不会调整给定字体的大小。 automaticDimension.estimatedRowHeight 并没有真正“强制”一个高度。此外,滑块的高度非常小,只有几个像素。它会“正确”调整大小,因为根据功能,滑块适合单元格所需的高度并不高。
  • @Craz1k0ek 我已经记录了 rangeSlider 的高度(viewDidLoad 中的打印语句)。上面写着30分。默认滑块上方一个单元格的高度为 31 磅。所以我不明白,为什么上面的单元格会自行扩展以使滑块适合,但是带有自定义滑块的另一个单元格不希望扩展其高度。

标签: ios swift xcode uitableview storyboard


【解决方案1】:

要使自动尺寸起作用,您必须有一个从 contentView 顶部到底部的完整约束链,并且该链中的每个项目都需要具有明确的高度或intrinsicContentSize。

从教程中我可以看出,他们没有为自定义滑块定义intrinsicContentSize。 UIKit 为具有intrinsicContentSize 的控件提供宽度和高度约束,如果您不以其他方式约束它们,则它们等于它们的 intrinsicContentSize。所以 1) 实现 intrinsicContentSize 或 2) 手动添加一个固定高度约束IN ADDTION TO 到 tableViewCell 的内容视图的顶部和底部约束。

【讨论】:

  • 啊哈是有道理的,当然它有效,在 UIView 上使用了大小约束。该单元格的其他“从上到下的约束”已经设置。只是缺少最后一个高度限制。谢谢
猜你喜欢
  • 1970-01-01
  • 2019-03-29
  • 1970-01-01
  • 2021-10-27
  • 1970-01-01
  • 2021-04-25
  • 1970-01-01
  • 1970-01-01
  • 2013-12-05
相关资源
最近更新 更多