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 
} 

感謝幫助。