我有一個UIScrollView
,其中UIView
標題粘貼在滾動視圖的頂部,並隨着用戶向下滾動而從全尺寸縮小爲小尺寸。當然,這些都是通過滾動視圖代理實現的:UIScrollViewDelegate scrollViewDidScroll方法跟不上高速滾動(輕彈)?
// scroll view delegate
extension SomeViewController {
// scroll view did scroll
public func scrollViewDidScroll(_ scrollView: UIScrollView) {
let contentOffsetY = scrollView.contentOffset.y
// make banner sticky
banner.frame.origin.y = max(0, contentOffsetY)
// shrink banner
if contentOffsetY > 0 && contentOffsetY <= bannerHeight! - 64 {
banner.frame.size.height = bannerHeight! - contentOffsetY
bannerGraphic.frame = banner.bounds
}
}
}
它工作的很好......如果用戶不以高速滾動。如果用戶向下滾動(高速),代表似乎沒有跟上,橫幅也不會完全縮小(可能是85-90%)。爲了驗證這一點,我將滾動視圖的偏移量打印到控制檯,並注意到當用戶緩慢滾動時,控制檯可能會打印100行當前偏移量。當用戶快速滾動時,控制檯可以打印25行當前偏移量。代表根本無法跟上高速滾動。
有沒有辦法確保橫幅縮小,而不管滾動速度如何,或者這只是與UIKit
的方式?
你想'banner.frame.size.height'爲*至少* 64?還是應該縮小到零? – DonMag
至少64(狀態欄+導航欄) – sconewolf
ok - 並且...如果在scrollview內容一直位於頂部時拉下來,所以'.contentOffset.y <0',橫幅應該向下移動頂端?或者保持「固定」到頂部,並保持其原始大小? – DonMag