我创建了一个UIScrollView以便在另一个带有标题的UIViewController中显示它。在我的scrollViewDidScroll()中,我有一些代码可以降低标头的高度。但是,当它执行时,标题视图中的所有元素(标签)都会更改。有什么方法可以保持其尺寸固定?ios - 修复UIView元素以避免在“scrollViewDidScroll”函数中更改尺寸-LMLPHP

我的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

    }

最佳答案

终于找到了我的答案。如果需要,我会将其发布给您使用。对于这种情况,我们不应该使用转换。我们可以使用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
}


感谢您的帮助。

关于ios - 修复UIView元素以避免在“scrollViewDidScroll”函数中更改尺寸,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43225485/

10-08 21:25