У меня есть 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
}
Надеюсь, моя проблема ясна. Если вам нужно больше разъяснений или кода, просто дайте мне знать:)