0

我创建了一个UIScrollView,以便在带有标题的另一个UIViewController中显示它。在我的scrollViewDidScroll()中,我有一些减少标题高度的代码。但是当它执行时,标题视图中的所有元素(标签)都会更改。有什么方法可以维持它们的尺寸? enter image description here修复UIView元素以避免更改“scrollViewDidScroll”函数中的尺寸

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 

    } 
+0

你的意思是你需要调整父视图的大小,并保留固定高度的子视图? – GoCrazy

+0

是的,实际上我想改变一个视图而不改变它的孩子的大小。 @GoCrazy –

+0

你是如何为scrollview创建标题的?通过storyboard/xib或编程? – zero3nna

回答

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 
} 

感谢帮助。