2016-10-29 1 views
0

앱 전체에서 사용되는 몇 가지 일반 속성이있는 UIStackView 인 상위 클래스를 만들었습니다.부모 클래스에 설정된 제약 조건을 재정의하는 방법

class baseStackView:UIView { 
var stack: UIStackView 
init(_ coder: NSCoder? = nil) { 

    stack = UIStackView() 
    stack.axis = UILayoutConstraintAxis.vertical 
    stack.distribution = UIStackViewDistribution.fill 
    stack.spacing = 20 

    if let coder = coder { 
     super.init(coder: coder)! 
    } else { 
     super.init(frame: CGRect.zero) 
    } 

    addSubview(stackView) 
} 

} 

override func didMoveToSuperview() { 
    super.didMoveToSuperview() 
    setupConstraints() 
} 

private func setupConstraints() { 
    translatesAutoresizingMaskIntoConstraints = false 
    stack.translatesAutoresizingMaskIntoConstraints = false 

    stack.topAnchor.constraint(equalTo: topAnchor, constant: 20).isActive = true 

    stack.leadingAnchor.constraint(equalTo: leadingAnchor, constant: 32).isActive = true 
    stack.trailingAnchor.constraint(equalTo: trailingAnchor, constant: -32).isActive = true 
} 

지금, 나는 내 필요한보기 중 하나의 모양에 맞게 변경할 수 stackView의 선행 및 후행 앵커를 변경해야하는 상황에왔다.

당연히, 나는 단지 내 자식 클래스 중 하나에서 후행하는 선행 제약 조건을 다시 설정합니다.

기술적으로 나는 제약 조건 내에서 충돌을 일으키는 것 같습니다. 두 번 설정하고 있습니다. 이러한 경고를 피하기 위해 초기 제약 조건을 재정의하는 방법이 있습니까? 어떤 도움이라도 대단히 감사 할 것입니다.

답변

0

새 제약 조건을 만들지 마십시오. 변경하려는 제약 조건을 컨트롤의 소스 파일로 Ctrl 키를 누른 채 드래그하여 제약 조건에 대한 아웃렛을 만듭니다.

그런 다음 제약 조건의 상수 값을 변경하여 금액을 변경할 수 있습니다.

+0

스트로보 보드를 사용하지 않습니다. 코드를 통해이를 복제하는 방법이 있습니까? –

+0

물론입니다. 의미있는 이름을 사용하여 인스턴스 변수를 설정할 때 제약 조건에 그대로 두십시오. (게시 한 코드는 저장하지 않는 "설정 및 잊어 버림"구문을 사용하여 제약 조건을 작성합니다. 대신에 'baseView.stack.leadingAnchor.constraint (equalTo : leadingAnchor)'와 같은 라인의 결과를 인스턴스에 할당하십시오 변수 –

+0

그런 다음 두 번째 코드 행에서 isActive를 true로 설정하십시오. –

관련 문제