2017-09-03 4 views
0

SnapView를 사용하여 nameTextField 및 superView inputContainerView로 구성된 UIView 높이의 제약 조건을 수정합니다. 나는 nameTextField의 높이가 inputContainerView의 높이의 3 분의 1과 같다고 생각합니다. 내 목적은 SegmentedControl 키를 눌렀을 때 nameTextField를 제거하는 것입니다. 상수를 수정하려고하면 완벽하게 작동합니다. 그러나 (1/3)에서 0으로 승수 높이 값을 수정하려고 할 때 가끔 충돌하고 때로는 (passwordTextField 및 emailTextField) 쓴 다른 textField 사라졌습니다. updateContraint를 사용하여 일부 제약 조건을 업데이트하고 있습니다. 어떻게 해결해야합니까? 당신이Swift 3에서 SnapKit을 사용하여 제약 조건을 수정하여 하나의 UIView를 제거합니다.

inputContainerView.snp.makeConstraints { (make) in 
     make.centerX.equalTo(view.snp.centerX) 
     make.centerY.equalTo(view.snp.centerY) 
     // constraintAnchor is equal to offset 
     make.width.equalTo(view.snp.width).offset(-24) 
     make.height.equalTo(150) 
    } 

    // constraint for nameTextField 
    inputContainerView.addSubview(nameTextField) 
    //x y width height constraint using Snap Kit 
    nameTextField.snp.makeConstraints { (make) in 
     make.left.equalTo(inputContainerView.snp.left).offset(12) 
     make.top.equalTo(inputContainerView.snp.top) 
     make.width.equalTo(inputContainerView.snp.width) 
     make.height.equalTo(inputContainerView.snp.height).multipliedBy(0.333) 
    } 
func handleLoginRegisterChange() { 
    let title = loginRegisterSegmentedControl.titleForSegment(at: loginRegisterSegmentedControl.selectedSegmentIndex) 
    loginRegisterButton.setTitle(title, for: .normal) 

    // change height of inputcontainerview 
    if loginRegisterSegmentedControl.selectedSegmentIndex == 0 { 
     inputContainerView.snp.updateConstraints({ (update) in 
      update.height.equalTo(100) 
     }) 
     nameTextField.snp.remakeConstraints({ (remake) in 
      remake.height.equalTo(inputContainerView.snp.height).multipliedBy(0) 
     }) 
    } else if loginRegisterSegmentedControl.selectedSegmentIndex == 1 { 
     inputContainerView.snp.updateConstraints({ (update) in 
      update.height.equalTo(150) 
     }) 
     nameTextField.snp.remakeConstraints({ (remake) in 
      remake.height.equalTo(inputContainerView.snp.height).multipliedBy(0.333) 
     }) 
    } 
} 
// constraint for nameSeparator 
    inputContainerView.addSubview(nameSeparator) 
    //x y width height constraint using Snap Kit 
    nameSeparator.snp.makeConstraints { (make) in 
     make.left.equalTo(inputContainerView.snp.left).offset(12) 
     make.top.equalTo(nameTextField.snp.bottom) 
     make.right.equalTo(inputContainerView.snp.right).offset(-12) 
     make.height.equalTo(1) 
    } 

    // constraint for emailTextField 
    inputContainerView.addSubview(emailTextField) 
    //x y width height constraint using Snap Kit 
    emailTextField.snp.makeConstraints { (make) in 
     make.left.equalTo(inputContainerView.snp.left).offset(12) 
     make.top.equalTo(nameSeparator.snp.bottom) 
     make.width.equalTo(inputContainerView.snp.width) 
     make.height.equalTo(inputContainerView.snp.height).multipliedBy(0.333) 
    } 

    // constraint for emailSeparator 
    inputContainerView.addSubview(emailSeparator) 
    //x y width height constraint using Snap Kit 
    emailSeparator.snp.makeConstraints { (make) in 
     make.left.equalTo(inputContainerView.snp.left).offset(12) 
     make.top.equalTo(emailTextField.snp.bottom) 
     make.right.equalTo(inputContainerView.snp.right).offset(-12) 
     make.height.equalTo(1) 
    } 

    // constraint for passwordTextField 
    inputContainerView.addSubview(passwordTextField) 
    passwordTextField.snp.makeConstraints { (make) in 
     make.left.equalTo(inputContainerView.snp.left).offset(12) 
     make.top.equalTo(emailSeparator.snp.bottom) 
     make.width.equalTo(inputContainerView.snp.width) 
     make.height.equalTo(inputContainerView.snp.height).multipliedBy(0.333) 
    } 

여기에 표시되는 이미지와 감사합니다 enter image description here enter image description here

답변

1

remakeConstraints가 이전에 설치된 모든 제약 조건을 제거합니다. 그래서, 당신은 아마도 최고, 선도 등의 모든 제약을 제거하고 단지 높이를 재설치하고있을 것입니다. updateConstraints을 사용하거나 초기에 선언 된 모든 제약 조건을 사용하여 리메이크해야합니다.