[英]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
contentInset
在UITableView
范围内的工作方式了解有误。 接下来, 文档将介绍UIScrollView's
contentInset
:
使用此属性可以扩展内容和内容视图边缘之间的空间。 大小单位是磅。 默认值为UIEdgeInsetsZero。 默认情况下,UIKit会自动调整内容插图以解决重叠的条。 您可以使用此属性进一步扩展该距离,也许可以容纳您自己的自定义内容。 使用adjustedContentInset属性获取总调整量,即安全区域加上您的自定义插图。 要更改安全区域的应用方式,请修改contentInsetAdjustmentBehavior属性。
因此,设置contentInset
实际上不会修改contentSize
。 例如,当您在UINavigationController
内安装视图控制器时,请注意垂直内容插入如何更改。 默认情况下, UIScrollView
自动修改contentInset
以向下移动内容,以使UINavigationBar
不与您的内容重叠。
从iOS 11开始,还有更多用于安全区域的高级API,请在此处找到。
对于您的问题,您需要以某种方式修改UIScrollView's
contentSize
,以实现所需的行为。 UITableView
不提供此类API,并且表视图的contentSize
等于表视图绑定的大小。
我认为有三种可能的选择:
UITableViewCell
顶部添加另一个具有透明背景的contentView
来更改UITableViewCell
视图的层次结构。 然后,使contentView's
大小小于superview的大小,最后将所有其他UI组件放在内容视图的顶部。 UITableView
切换到UICollectionView
并使用自定义布局(可以使用UICollectionViewFlowLayout
)。 您可以轻松地使其看起来像UITableView
布局,并为项和节设置不同的插图,甚至可以计算自定义contentSize
。 UITableView
设置新的contentSize
,但是我不建议这样做。 最终解决方案可能并不明显,并且会使代码库混乱。 希望这可以帮助!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.