0

J'ai créé un UIScrollView pour l'afficher dans un autre UIViewController avec un en-tête. Dans mon scrollViewDidScroll(), j'ai du code qui diminue la hauteur de l'en-tête. Mais quand il fonctionne, tous les éléments (Label) dans l'en-tête changent. Est-il possible de garder leurs dimensions fixes? enter image description hereCorrection des éléments UIView pour éviter de changer les dimensions de la fonction "scrollViewDidScroll"

ma fonction scrollViewDidScroll() est ici:

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

Vous voulez dire que vous devez redimensionner la vue parente et laisser les vues enfants avec une hauteur fixe? – GoCrazy

+0

Oui, en fait je veux transformer une vue sans changer la taille de son enfant. @GoCrazy –

+0

Comment avez-vous créé l'en-tête pour le scrollview? Via storyboard/xib ou par programmation? – zero3nna

Répondre

0

enfin trouvé ma réponse. Je l'afficherai pour que vous puissiez l'utiliser si vous en avez besoin. Pour ce cas, nous ne devrions pas utiliser transform. Nous pouvons travailler avec view.frame.size.height. Vous devriez enregistrer la taille de la vue dans une variable au premier car sa valeur changera. donc ajouter à votre HeaderViewController (Dans mon cas, son nom est ScrollParentViewController):

var height: CGFloat! 
override func viewDidLoad() { 
    super.viewDidLoad() 
    height = redView.frame.height 
} 

vous pouvez utiliser cette variable dans votre 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 
} 

merci pour aide.