iOS/코드조각

[iOS, Swift] NSLayoutConstraint Multiplier 수정하기

검은참깨두유vm 2022. 10. 18. 18:12
반응형

iOS 15.5, Xcode 13.31, Swift 5, UIKit 환경에서 진행했습니다.

 

NSLayoutConstraint의 multiplier 값을 변경하려고 보니

Only-get으로만 값을 받을 수 있고, 값을 설정할 수가 없었다.

그래서 구글링을 해본 결과 스택오버플로우에서 Constraint 값을 제거하고,

새로운 Constraint를 설정해줄 때 multiplier 값을 변경하여 등록해주는 코드를 발견했다.

밑의 코드를 참고하면 된다.

import UIKit

extension NSLayoutConstraint {
    
    func setMultiplier(multiplier: CGFloat) -> NSLayoutConstraint {
        
        NSLayoutConstraint.deactivate([self])
        
        let newConstraint = NSLayoutConstraint(item: firstItem, attribute: firstAttribute, relatedBy: relation, toItem: secondItem, attribute: secondAttribute, multiplier: multiplier, constant: constant)
        
        newConstraint.priority = priority
        newConstraint.shouldBeArchived = self.shouldBeArchived
        newConstraint.identifier = self.identifier
        
        NSLayoutConstraint.activate([newConstraint])
        
        return newConstraint
    }
}

 

- NSLayoutConstraint Multiplier 값 변경하는 함수

 

@IBOutlet var newConstraints: NSLayoutConstraint!

override func viewDidLoad() {
	newConstraints = newConstraints.setMultiplier(multiplier: 0.16)
}

 

 

- setMultiplier 사용방법

반응형