Ios 如何在UITableView静态单元格中使用uiscrollview和UITableView.automaticDimension
我创建了一个滑块,如下所述: 使用Xcode 10.1、Swift 4.2.1 我有一个额外的用户界面视图,就像在教程中一样,只是由一个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! } 我有一个带
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
}