插入内容时,UITableView滚动无法正常工作

时间:2018-06-19 20:27:35

标签: ios swift uitableview uiscrollview

我想在tableView中添加一些插图以填充所有内容。当我只使用顶部/底部内容时,一切正常。但是尝试放置左右值时,tableView滚动不起作用(请参阅gif)。怎么了?

     @IBOutlet weak var tableView: UITableView!

override func viewDidLoad() {
    super.viewDidLoad()
    self.tableView.delegate = self
    self.tableView.dataSource = self
    self.tableView.clipsToBounds = true
    let insets = UIEdgeInsets(top: 20, left: 20, bottom: 20, right: 20)
    self.tableView.contentInset = insets
}

enter image description here

3 个答案:

答案 0 :(得分:1)

我建议您简单地将上下插图和左右插图分开: 您可以将上下插入添加到表格视图中, 左右插入到您的单元格作为内容视图的约束。

这种滚动方式可以根据需要进行工作。

答案 1 :(得分:0)

我认为,您对UIScrollView's contentInsetUITableView范围内的工作方式了解有误。 Documentation接下来说说UIScrollView's contentInset

  

使用此属性可以扩展内容和内容视图边缘之间的空间。大小单位是磅。默认值为UIEdgeInsetsZero。   默认情况下,UIKit会自动调整内容插图以解决重叠的条。您可以使用此属性进一步扩展该距离,也许可以容纳您自己的自定义内容。使用adjustedContentInset属性获取总调整量,即安全区域加上您的自定义插图。要更改安全区域的应用方式,请修改contentInsetAdjustmentBehavior属性。

因此,设置contentInset实际上不会修改contentSize。例如,当您在UINavigationController内安装视图控制器时,请注意如何更改垂直内容插图。默认情况下,UIScrollView自动修改contentInset以向下移动内容,以使UINavigationBar不与您的内容重叠。

从iOS 11开始,还有更多适用于安全区域的高级API,请here找到它。

对于您的问题,您需要以某种方式修改UIScrollView's contentSize才能获得所需的行为。 UITableView未提供此类API,并且表视图的contentSize等于表视图绑定的大小。

在我看来,有三种可能的选择:

  1. 您可以通过在UITableViewCell顶部添加另一个具有透明背景的contentView来更改UITableViewCell视图的层次结构。然后,使contentView's的大小小于Superview的大小,最后将所有其他UI组件放置在内容视图的顶部。
  2. 您可以从UITableView切换到UICollectionView并使用自定义布局(可以使用UICollectionViewFlowLayout)。您可以轻松地使其看起来像UITableView布局,并为项目和节设置不同的插图,甚至可以计算自定义contentSize
  3. 您可以使用布局循环,覆盖布局循环方法并为contentSize设置新的UITableView,但我不建议这样做。最终解决方案可能并不明显,并且会使代码库混乱。

希望这会有所帮助!

答案 2 :(得分:-2)

一种可能的简单解决方案是使用情节提要中的约束来添加填充:

enter image description here