У меня есть UIView на раскадровке как подпредставление ViewController, и у меня есть несколько полей в этом представлении, которые должны изменить свою позицию при нажатии кнопки. Поэтому я изменил, поэтому я сделал вывод для каждого FiledsView и дал им ограничения программно, но проблема в том, что они перекрываются и конфликтуют друг с другом, когда я нажимаю на другие кнопки.
Вот макет, который я хочу сделать
Здесь я помещаю все поля в другое представление
![Show](https://i.stack.imgur.com/tdrV8.png)
Это код
import UIKit
class AddOfferTabViewController: UIViewController {
@IBOutlet weak var formBaseView: UIView!
@IBOutlet weak var titleFieldView: RoundView!
@IBOutlet weak var descriptionView: RoundView!
@IBOutlet weak var pointsView: RoundView!
@IBOutlet weak var startEndDateStackView: UIStackView!
@IBOutlet weak var maxCharLimitStackView: UIStackView!
@IBOutlet weak var amountView: RoundView!
@IBOutlet weak var textViewDescription: TextViewWithPlaceholder!
@IBOutlet weak var textFieldAmount: UITextField!
var buttonClicked:String!
override func viewDidLoad() {
super.viewDidLoad()
self.tabBarController?.tabBar.isHidden = true
// setupCashDiscountView(isLayoutActive: true)
setupFreebeView(isLayoutActive: true)
}
@IBAction func addOfferButtonsActions(_ sender: UIButton) {
switch sender.tag {
case 1: //FreeBe
print("Freebe")
buttonClicked = "Freebe"
setupCashDiscountView(isLayoutActive: false)
setupPercentDiscountView(isLayoutActive: false)
setupFreebeView(isLayoutActive: true)
case 2: //Cash Discount
print("Cash Discount")
buttonClicked = "Cash"
setupFreebeView(isLayoutActive: false)
setupPercentDiscountView(isLayoutActive: false)
setupCashDiscountView(isLayoutActive: true)
case 3: //% Discount
print("% Discount")
buttonClicked = "percent"
setupFreebeView(isLayoutActive: false)
setupCashDiscountView(isLayoutActive: false)
setupPercentDiscountView(isLayoutActive: true)
default:
print("there is something wrong")
}
}
//MARK:Setup FreebeView
func setupFreebeView(isLayoutActive:Bool){
amountView.isHidden = true
textViewDescription.placeholderText = "Any T&C"
setupInputFields(fieldView: titleFieldView, topConstraints: formBaseView.topAnchor, leadingSpace: 0, trailingSpace: 0, topSpace: 8, height: 44, isActive: isLayoutActive) //Title Input Field
setupInputFields(fieldView: descriptionView, topConstraints: titleFieldView.bottomAnchor, leadingSpace: 0, trailingSpace: 0, topSpace: 15, height: 95, isActive: isLayoutActive) //Description View
setupMaxCharStackView(formStackView: maxCharLimitStackView, topConstraints: descriptionView.bottomAnchor, trailingSpace: 0, topSpace: 10, isActive: isLayoutActive) //Character Limit View
setupInputFields(fieldView: pointsView, topConstraints: descriptionView.bottomAnchor, leadingSpace: 0, trailingSpace: 0, topSpace: 40, height: 44, isActive: isLayoutActive) //PointsView
setupStartEndDateStackView(formStackView: startEndDateStackView, topConstraints: pointsView.bottomAnchor, leadingSpace: 0, trailingSpace: 0, topSpace: 15, isActive: isLayoutActive) //StartDate Endate
}
//MARK:Setup CashDiscount
func setupCashDiscountView(isLayoutActive:Bool){
amountView.isHidden = false
textViewDescription.placeholderText = "Description"
setupInputFields(fieldView: amountView, topConstraints: formBaseView.topAnchor, leadingSpace: 0, trailingSpace: 0, topSpace: 8, height: 44, isActive: isLayoutActive) //Amount View
setupInputFields(fieldView: pointsView, topConstraints: amountView.bottomAnchor, leadingSpace: 0, trailingSpace: 0, topSpace: 15, height: 44, isActive: isLayoutActive) //Points View
setupStartEndDateStackView(formStackView: startEndDateStackView, topConstraints: pointsView.bottomAnchor, leadingSpace: 0, trailingSpace: 0, topSpace: 15, isActive: isLayoutActive) //StartDate Endate
setupInputFields(fieldView: titleFieldView, topConstraints: startEndDateStackView.bottomAnchor, leadingSpace: 0, trailingSpace: 0, topSpace: 15, height: 44, isActive: isLayoutActive) //Title View
setupInputFields(fieldView: descriptionView, topConstraints: titleFieldView.bottomAnchor, leadingSpace: 0, trailingSpace: 0, topSpace: 15, height: 95, isActive: isLayoutActive) //Description View
setupMaxCharStackView(formStackView: maxCharLimitStackView, topConstraints: descriptionView.bottomAnchor, trailingSpace: 0, topSpace: 10, isActive: isLayoutActive) //Character Limit View
}
//MARK:Setup % Discount
func setupPercentDiscountView(isLayoutActive:Bool){
amountView.isHidden = false
textViewDescription.placeholderText = "Description"
setupInputFields(fieldView: amountView, topConstraints: formBaseView.topAnchor, leadingSpace: 0, trailingSpace: 0, topSpace: 8, height: 44, isActive: isLayoutActive) //Amount View
setupInputFields(fieldView: pointsView, topConstraints: amountView.bottomAnchor, leadingSpace: 0, trailingSpace: 0, topSpace: 15, height: 44, isActive: isLayoutActive) //Points View
setupStartEndDateStackView(formStackView: startEndDateStackView, topConstraints: pointsView.bottomAnchor, leadingSpace: 0, trailingSpace: 0, topSpace: 15, isActive: isLayoutActive) //StartDate Endate
setupInputFields(fieldView: titleFieldView, topConstraints: startEndDateStackView.bottomAnchor, leadingSpace: 0, trailingSpace: 0, topSpace: 15, height: 44, isActive: isLayoutActive) //Title View
setupInputFields(fieldView: descriptionView, topConstraints: titleFieldView.bottomAnchor, leadingSpace: 0, trailingSpace: 0, topSpace: 15, height: 95, isActive: isLayoutActive) //Description View
setupMaxCharStackView(formStackView: maxCharLimitStackView, topConstraints: descriptionView.bottomAnchor, trailingSpace: 0, topSpace: 10, isActive: isLayoutActive) //Character Limit View
}
//MARK: SetupInputFields function
func setupInputFields(fieldView:UIView,topConstraints:NSLayoutAnchor<NSLayoutYAxisAnchor>,leadingSpace:CGFloat,trailingSpace:CGFloat,topSpace:CGFloat,height:CGFloat,isActive:Bool){
fieldView.translatesAutoresizingMaskIntoConstraints = false //Make it false for working of constraints
fieldView.topAnchor.constraint(equalTo: topConstraints,constant: topSpace).isActive = isActive
fieldView.leadingAnchor.constraint(equalTo: formBaseView.leadingAnchor,constant: leadingSpace).isActive = isActive
fieldView.trailingAnchor.constraint(equalTo: formBaseView.trailingAnchor,constant: trailingSpace).isActive = isActive
fieldView.heightAnchor.constraint(equalToConstant: height).isActive = isActive
// fieldView.layoutIfNeeded()
}
//MARK: Setup MaxCharacter StackView function
func setupMaxCharStackView(formStackView:UIStackView,topConstraints:NSLayoutAnchor<NSLayoutYAxisAnchor>,trailingSpace:CGFloat,topSpace:CGFloat,isActive:Bool){
formStackView.translatesAutoresizingMaskIntoConstraints = false //Make it false for working of constraints
formStackView.topAnchor.constraint(equalTo: topConstraints,constant: topSpace).isActive = isActive
formStackView.trailingAnchor.constraint(equalTo: formBaseView.trailingAnchor,constant: trailingSpace).isActive = isActive
}
//MARK: Setup StartDate EndDate StackView function
func setupStartEndDateStackView(formStackView:UIStackView,topConstraints:NSLayoutAnchor<NSLayoutYAxisAnchor>,leadingSpace:CGFloat? = nil,trailingSpace:CGFloat,topSpace:CGFloat,isActive:Bool){
formStackView.translatesAutoresizingMaskIntoConstraints = false //Make it false for working of constraints
formStackView.topAnchor.constraint(equalTo: topConstraints,constant: topSpace).isActive = isActive
formStackView.leadingAnchor.constraint(equalTo: formBaseView.leadingAnchor,constant: leadingSpace!).isActive = isActive
formStackView.trailingAnchor.constraint(equalTo: formBaseView.trailingAnchor,constant: trailingSpace).isActive = isActive
}
}