Обновление высоты UIView при изменении высоты StackView - PullRequest
0 голосов
/ 06 апреля 2020

У меня есть UIView с StackView внутри, и я позволяю этому UIView появляться / исчезать на buttonTap.

добавить UIView с StackView внутри него к ViewController:

@objc func addWishButtonTapped(){

    wishView.wishNameTextField.becomeFirstResponder()

    let screenSize = UIScreen.main.bounds.size
    self.wishView.frame = CGRect(x: 0, y: screenSize.height, width: screenSize.width, height: self.wishView.height)

    self.view.addSubview(self.wishView)

    UIView.animate(withDuration: 0.5, delay: 0, usingSpringWithDamping: 1.0, initialSpringVelocity: 1.0, options: .curveEaseInOut, animations: {
        self.wishView.frame = CGRect(x: 0, y: screenSize.height - self.wishView.height - self.keyboardHeight, width: screenSize.width, height: self.wishView.height)

    }, completion: nil)
}

Проблема: Внутри StackView я хочу создать arrangedSubview появляются / исчезают.

@objc func priceButtonTapped(){
    self.height += CGFloat(priceViewHeight)
    priceView.isHidden = false
}

Как видите, я использую переменную height внутри wishView, чтобы отслеживать ее высоту и использовать ее для анимации выше. Проблема в том, что если я вызываю эту функцию, чтобы показать arrangedSubview, но она не обновляет frame.height в ViewController.

Это только обновление frame.height после того, как я позволил представлению исчезают и появляются снова:

@objc func dismissWishView() {

    let screenSize = UIScreen.main.bounds.size

    UIView.animate(withDuration: 0.15, delay: 0, options: .curveEaseOut, animations: {
        self.wishView.frame = CGRect(x: 0, y: screenSize.height, width: screenSize.width, height: self.wishView.height)
        self.wishView.endEditing(true)
    }, completion: nil)

}

Вот так я настраиваю WishView:

//MARK: setupViews
func setupViews(){

    addSubview(theStackView)
    theStackView.topAnchor.constraint(equalTo: self.topAnchor).isActive = true
    theStackView.leadingAnchor.constraint(equalTo: self.leadingAnchor).isActive = true
    theStackView.trailingAnchor.constraint(equalTo: self.trailingAnchor).isActive = true
    theStackView.bottomAnchor.constraint(equalTo: self.bottomAnchor).isActive = true

    theStackView.addArrangedSubview(self.wishView)
    wishView.addSubview(wishNameTextField)
    wishView.addSubview(wishButton)

    wishView.heightAnchor.constraint(equalToConstant: 70).isActive = true
    self.height += CGFloat(self.wishViewHeight)

    wishButton.heightAnchor.constraint(equalToConstant: 45).isActive = true
    wishButton.widthAnchor.constraint(equalToConstant: 45).isActive = true
    wishButton.trailingAnchor.constraint(equalTo: wishView.trailingAnchor, constant: -20).isActive = true
    wishButton.centerYAnchor.constraint(equalTo: wishView.centerYAnchor, constant: 10).isActive = true

    wishNameTextField.leadingAnchor.constraint(equalTo: wishView.leadingAnchor, constant: 20).isActive = true
    wishNameTextField.centerYAnchor.constraint(equalTo: wishView.centerYAnchor, constant: 10).isActive = true
    wishNameTextField.trailingAnchor.constraint(equalTo: wishButton.leadingAnchor, constant: -20).isActive = true

    theStackView.addArrangedSubview(self.priceView)
    priceView.addSubview(priceLabel)
    priceView.addSubview(priceTextField)

    priceView.heightAnchor.constraint(equalToConstant: 50).isActive = true
    priceView.isHidden = true

    priceLabel.leadingAnchor.constraint(equalTo: priceView.leadingAnchor, constant: 20).isActive = true
    priceLabel.centerYAnchor.constraint(equalTo: priceView.centerYAnchor).isActive = true

    priceTextField.leadingAnchor.constraint(equalTo: priceLabel.trailingAnchor, constant: 10).isActive = true
    priceTextField.trailingAnchor.constraint(equalTo: priceView.trailingAnchor, constant: -195).isActive = true
    priceTextField.centerYAnchor.constraint(equalTo: priceView.centerYAnchor, constant: 1).isActive = true


    theStackView.addArrangedSubview(self.itemView)
    itemView.addSubview(imageButton)
    itemView.addSubview(priceButton)

    itemView.heightAnchor.constraint(equalToConstant: 60).isActive = true
    self.height += CGFloat(self.itemViewHeight)

    imageButton.heightAnchor.constraint(equalToConstant: 25).isActive = true
    imageButton.widthAnchor.constraint(equalToConstant: 25).isActive = true
    imageButton.centerYAnchor.constraint(equalTo: itemView.centerYAnchor).isActive = true
    imageButton.leadingAnchor.constraint(equalTo: itemView.leadingAnchor, constant: 20).isActive = true

    priceButton.heightAnchor.constraint(equalToConstant: 25).isActive = true
    priceButton.widthAnchor.constraint(equalToConstant: 25).isActive = true
    priceButton.centerYAnchor.constraint(equalTo: itemView.centerYAnchor).isActive = true
    priceButton.leadingAnchor.constraint(equalTo: imageButton.leadingAnchor, constant: 50).isActive = true


}

Надеюсь, моя проблема ясна. Если вам нужно больше разъяснений или кода, просто дайте мне знать:)

...