修复 UIView 元素以避免在 "scrollViewDidScroll" 函数中更改尺寸
Fix UIView elements to avoid changing dimensions in "scrollViewDidScroll" function
我创建了一个 UIScrollView
以在另一个带有 header 的 UIViewController
中显示它。在我的 scrollViewDidScroll()
中,我有一些代码可以降低 header 的高度。但是当它执行时,header 视图中的所有元素(标签)都会发生变化。有什么方法可以固定它们的尺寸吗?
我的 scrollViewDidScroll()
函数在这里:
func scrollViewDidScroll(_ scrollView: UIScrollView) {
var labelAlpha = 4 * scrollView.contentOffset.y / scrollView.frame.height
labelAlpha = max(0, labelAlpha)
labelAlpha = min(1, labelAlpha)
let parent = self.parent as? ScrollParentViewController
var viewScale = 1.0 - 4 * scrollView.contentOffset.y / scrollView.frame.height
viewScale = max(0.5, viewScale)
parent?.redView.transform = CGAffineTransform(scaleX: 1, y: viewScale)
parent?.redView.frame.origin.y = 0
parent?.whiteLabel.alpha = labelAlpha
}
终于找到了我的答案。如果需要,我会 post 供您使用。对于这种情况,我们不应该使用转换。我们可以使用 view.frame.size.height
。您应该首先将视图的高度大小保存在一个变量中,因为它的值会改变。
所以将它添加到你的HeaderViewController
(在我的例子中它的名字是ScrollParentViewController
):
var height: CGFloat!
override func viewDidLoad() {
super.viewDidLoad()
height = redView.frame.height
}
然后你可以在你的 scrollViewDidScroll()
:
中使用这个变量
func scrollViewDidScroll(_ scrollView: UIScrollView) {
var viewScale = 1.0 - 4 * scrollView.contentOffset.y / scrollView.frame.height
viewScale = max(0.5, viewScale)
let parent = self.parent as? ScrollParentViewController
parent?.redView.frame.size.height = (parent?.height)! * viewScale
}
感谢您的帮助。
我创建了一个 UIScrollView
以在另一个带有 header 的 UIViewController
中显示它。在我的 scrollViewDidScroll()
中,我有一些代码可以降低 header 的高度。但是当它执行时,header 视图中的所有元素(标签)都会发生变化。有什么方法可以固定它们的尺寸吗?
我的 scrollViewDidScroll()
函数在这里:
func scrollViewDidScroll(_ scrollView: UIScrollView) {
var labelAlpha = 4 * scrollView.contentOffset.y / scrollView.frame.height
labelAlpha = max(0, labelAlpha)
labelAlpha = min(1, labelAlpha)
let parent = self.parent as? ScrollParentViewController
var viewScale = 1.0 - 4 * scrollView.contentOffset.y / scrollView.frame.height
viewScale = max(0.5, viewScale)
parent?.redView.transform = CGAffineTransform(scaleX: 1, y: viewScale)
parent?.redView.frame.origin.y = 0
parent?.whiteLabel.alpha = labelAlpha
}
终于找到了我的答案。如果需要,我会 post 供您使用。对于这种情况,我们不应该使用转换。我们可以使用 view.frame.size.height
。您应该首先将视图的高度大小保存在一个变量中,因为它的值会改变。
所以将它添加到你的HeaderViewController
(在我的例子中它的名字是ScrollParentViewController
):
var height: CGFloat!
override func viewDidLoad() {
super.viewDidLoad()
height = redView.frame.height
}
然后你可以在你的 scrollViewDidScroll()
:
func scrollViewDidScroll(_ scrollView: UIScrollView) {
var viewScale = 1.0 - 4 * scrollView.contentOffset.y / scrollView.frame.height
viewScale = max(0.5, viewScale)
let parent = self.parent as? ScrollParentViewController
parent?.redView.frame.size.height = (parent?.height)! * viewScale
}
感谢您的帮助。