修复UIView元素以避免在“scrollViewDidScroll”函数中更改维度

时间:2017-04-05 08:12:23

标签: ios swift uiscrollview cgaffinetransform uiscrollviewdelegate

我创建了一个UIViewController,以便在另一个scrollViewDidScroll()中显示标题。在我的scrollViewDidScroll()中,我有一些代码会降低标题的高度。但是当它执行时,标题视图中的所有元素(Label)都会发生变化。有没有办法保持尺寸不变?enter image description here

我的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 } 功能在这里:

mystruct.number_of_steps1 = number_of_steps1
mystruct.number_of_steps2 = number_of_steps2

1 个答案:

答案 0 :(得分:0)

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

感谢帮助。