繁体   English   中英

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

[英]UITableView scroll not working properly when inset content

我想在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
}

在此处输入图片说明

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

这样,滚动就可以根据需要工作。

我认为,您对UIScrollView's contentInsetUITableView范围内的工作方式了解有误。 接下来, 文档将介绍UIScrollView's contentInset

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

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

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

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

我认为有三种可能的选择:

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

希望这可以帮助!

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

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM