我正在尝试仅将rootMargin的最高值增加50px。我用于该选项的代码是var refreshControl = UIRefreshControl()
override func viewDidLoad() {
super.viewDidLoad()
[...]
refreshControl.tintColor = .gray
refreshControl.backgroundColor = .white
refreshControl.addTarget(self, action: #selector(refreshContents), for: .valueChanged)
eventCollectionView.refreshControl = refreshControl
eventCollectionView.register(EventHeaderView.self, forSupplementaryViewOfKind: UICollectionView.elementKindSectionHeader, withReuseIdentifier: toolbarId)
}
@objc func refreshContents() {
self.perform(#selector(finishedRefreshing), with: nil, afterDelay: 1.5)
}
@objc func finishedRefreshing() {
refreshControl.endRefreshing()
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForHeaderInSection section: Int) -> CGSize {
return .init(width: screenWidth, height: 50)
}
。那是行不通的。
尽管使用rootMargin: '50px 0px 0px 0px'
可以解决我的问题,但我并不希望增加底值。
下面列出了完整的测试代码。我没有在jsFiddle上创建演示,因为jsFiddle将结果包装在iframe中,该iframe是root
。我无法将该iframe设置为jsFiddle的根目录,因此该演示无法正常工作。
rootMargin: '50px 0px'
答案 0 :(得分:1)
虽然这是一个较旧的问题,但我认为以下内容可能对遇到类似问题的用户有所帮助。
您可以在 JSFiddle 中运行演示 - 只需更改要用作触发器的根目录即可。请参阅下面的演示以突出显示这一点。
我认为您可能混淆了 rootMargin 属性。从您的问题来看,听起来您希望观察到的元素在 出现之前触发 50 像素。如果是这种情况,那么您想增加根 bottom 边距:0px 0px 50px 0px
如果您只想在根内达到 50px 时触发元素,则使用:{{1 }}。您可以省略最后一个值,例如:0px 0px -50px 0px
,即 0px 0px 50px
请看下面的演示: