Ios 如何在UITableView静态单元格中使用uiscrollview和UITableView.automaticDimension

Ios 如何在UITableView静态单元格中使用uiscrollview和UITableView.automaticDimension,ios,swift,xcode,uitableview,uiscrollview,Ios,Swift,Xcode,Uitableview,Uiscrollview,我创建了一个滑块,如下所述: 使用Xcode 10.1、Swift 4.2.1 我有一个额外的用户界面视图,就像在教程中一样,只是由一个uiimageview和4个约束组成: 安全区域底部=图像视图底部 图像视图顶部=安全区域顶部 图像视图中心X=超级视图中心X 图像视图宽度=超级视图宽度 所以它的自定义类只是: class ImageSlide: UIView { @IBOutlet weak var mainImageView: UIImageView! } 我有一个带

我创建了一个滑块,如下所述:

使用Xcode 10.1、Swift 4.2.1

我有一个额外的用户界面视图,就像在教程中一样,只是由一个
uiimageview
和4个约束组成:

  • 安全区域底部=图像视图底部
  • 图像视图顶部=安全区域顶部
  • 图像视图中心X=超级视图中心X
  • 图像视图宽度=超级视图宽度
所以它的自定义类只是:

class ImageSlide: UIView {

    @IBOutlet weak var mainImageView: UIImageView!   
}
我有一个带有Tableview控制器的故事板。表视图的内容设置为
静态单元格
,使用
自动标注
。 对滚动视图使用此约束

控制器生命周期:

override func viewDidLoad() {
    ...
    self.tableView.rowHeight = UITableView.automaticDimension
    self.tableView.estimatedRowHeight = 40.0
    ...
}

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    setupSlideScrollView(with: slides)
}

override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
    super.viewWillTransition(to: size, with: coordinator)
    setupSlideScrollView(with: slides)
}

override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
   return UITableView.automaticDimension
}

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)

    // time consuming (pictures fetched over the network)
    slides = createSlides()
    setupSlideScrollView(with: slides)
}
我在表格视图中确实有一些空单元格,不知道警告是因为它们还是因为滑块。 当我旋转设备时,看起来给定幻灯片的高度为
300.0
,但单元格要大得多(填满整个屏幕)

我不明白为什么刚开始的时候牢房高度是40或50左右,还有警告信息。为什么单元格不能自动适应300的指定高度?
例如,我想说,滑块的高度应始终为,例如,view.frame.height/3。细胞也应该如此。我放在滑块中的图像应该符合
scaleAscpectFill
并填充整个宽度。但不知何故,它不起作用。

休息后,我想出了一个解决方案,实际上我不确定这是一个解决方案还是一个变通办法

我添加了一个计算属性

var sliderHeight: CGFloat! {
    get {
        return view.frame.width/2
    }
}
改变

override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    if indexPath.section == 0, indexPath.row == 0 {
        return sliderHeight
    }
    return UITableView.automaticDimension
}
分别将
setupSlideScrollView
方法更改为不使用
300.0
的硬编码高度,而是使用
sliderHeight
。它仍然不是完美的(页面控件视图丢失,现在将对此进行查看),但单元格的高度到目前为止似乎是正确的。 顺便说一句,第一个帖子的警告也消失了。
伙计们,你们认为这是一个合适的解决方案还是一个变通方案?

休息后,我想出了一个解决方案,实际上我不确定这是一个解决方案还是变通方案

我添加了一个计算属性

var sliderHeight: CGFloat! {
    get {
        return view.frame.width/2
    }
}
改变

override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    if indexPath.section == 0, indexPath.row == 0 {
        return sliderHeight
    }
    return UITableView.automaticDimension
}
分别将
setupSlideScrollView
方法更改为不使用
300.0
的硬编码高度,而是使用
sliderHeight
。它仍然不是完美的(页面控件视图丢失,现在将对此进行查看),但单元格的高度到目前为止似乎是正确的。 顺便说一句,第一个帖子的警告也消失了。 伙计们,你们认为这是一个合适的解决方案还是一个解决办法

override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    if indexPath.section == 0, indexPath.row == 0 {
        return sliderHeight
    }
    return UITableView.automaticDimension
}