我想在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
}
答案 0 :(得分:1)
我建议您简单地将上下插图和左右插图分开: 您可以将上下插入添加到表格视图中, 左右插入到您的单元格作为内容视图的约束。
这种滚动方式可以根据需要进行工作。
答案 1 :(得分:0)
我认为,您对UIScrollView's
contentInset
在UITableView
范围内的工作方式了解有误。
Documentation接下来说说UIScrollView's
contentInset
:
使用此属性可以扩展内容和内容视图边缘之间的空间。大小单位是磅。默认值为UIEdgeInsetsZero。 默认情况下,UIKit会自动调整内容插图以解决重叠的条。您可以使用此属性进一步扩展该距离,也许可以容纳您自己的自定义内容。使用adjustedContentInset属性获取总调整量,即安全区域加上您的自定义插图。要更改安全区域的应用方式,请修改contentInsetAdjustmentBehavior属性。
因此,设置contentInset
实际上不会修改contentSize
。例如,当您在UINavigationController
内安装视图控制器时,请注意如何更改垂直内容插图。默认情况下,UIScrollView
自动修改contentInset
以向下移动内容,以使UINavigationBar
不与您的内容重叠。
从iOS 11开始,还有更多适用于安全区域的高级API,请here找到它。
对于您的问题,您需要以某种方式修改UIScrollView's
contentSize
才能获得所需的行为。 UITableView
未提供此类API,并且表视图的contentSize
等于表视图绑定的大小。
在我看来,有三种可能的选择:
UITableViewCell
顶部添加另一个具有透明背景的contentView
来更改UITableViewCell
视图的层次结构。然后,使contentView's
的大小小于Superview的大小,最后将所有其他UI组件放置在内容视图的顶部。UITableView
切换到UICollectionView
并使用自定义布局(可以使用UICollectionViewFlowLayout
)。您可以轻松地使其看起来像UITableView
布局,并为项目和节设置不同的插图,甚至可以计算自定义contentSize
。contentSize
设置新的UITableView
,但我不建议这样做。最终解决方案可能并不明显,并且会使代码库混乱。希望这会有所帮助!
答案 2 :(得分:-2)