2017-04-14 1 views
0

CustomView's 크기가 300x300이라고 가정합시다. iconImageView에는 크기와 할당 된 제약이 있습니다. 내가 얼마나 UILabel에 텍스트가 될지 모르겠다. 그래서 나는 일정한 크기의 UILabel을 만들고 싶지 않다. 내 목표는 iconImageView의 오른쪽에 왼쪽 제약 조건을 고정하고 오른쪽은 customView입니다. 나는이 방법을 시도 할 때자동 크기 조정 UILabel with SnapKit

override func updateConstraints() { 
    super.updateConstraints() 

    iconImageView.snp.updateConstraints { (make) in 
     make.left.equalTo(customView).offset(10) 
     make.centerY.equalTo(customView) 
     make.size.equalTo(CGSize(width: 40.0, height: 40.0)) 
    } 

    nameLabel.snp.updateConstraints { (make) in 
     make.right.equalTo(customView).offset(-10) 
     make.left.equalTo(iconImageView.snp.right).offset(10) 
     make.centerY.equalTo(customView) 
    } 
} 

나는 오류 : Unable to simultaneously satisfy constraints.이 할 수있는 적절한 방법은 무엇입니까?

+0

hmmm ... 방금 코드를 시도했지만 제대로 작동했습니다. 이 코드는'UIView' 하위 클래스에 있다고 가정합니다. 그리고 *보기에는 SuperView와 관련된 적절한 제약이 있습니다. 그리고'customView'는 300x300으로 만들고보기 내부에 배치하기위한 적절한 제약 조건을 가지고 있습니까? – DonMag

+0

이 코드는 UIView 하위 클래스에 있으며 수퍼 뷰를 기준으로 적절한 제약 조건이 있습니다. 이 뷰는 UIPageViewController의 일부이기 때문에 다른 ViewController로 슬라이드하면 오류가 발생합니다. – Billy

+0

흠 ... 오류가 발생했을 때 좀 더 자세한 정보가 필요합니다. 먼저 updateConstraints()를 재정의 (override)하는 것에 대한 논의를 읽어야합니다 (시작해야 할 정보를 제공 할 수 있습니다) : https://developer.apple.com/reference/uikit/uiview/1622512 - 갱신 조건 – DonMag

답변

0

글쎄, 당신의 하위 뷰는 위쪽/아래쪽 제약에 대해 아무 것도 모른다는 것은 뷰가 자신을 다시 레이아웃하는 법을 모른다고 가정합니다.

make.height.greaterThanOrEqual(40.0) 

또한 자동 레이아웃 및 프레임 그렇지 않은 : 당신이 (등 빈 문자열의 경우) 라벨의 "기본"높이를 유지하려면

override func updateConstraints() { 
    super.updateConstraints() 

    iconImageView.snp.updateConstraints { (make) in 
     make.left.equalTo(customView).offset(10) 
     make.centerY.equalTo(customView) 

     // Also from my point of view this line \/ 
     // is not very readable 
     // make.size.equalTo(CGSize(width: 40.0, height: 40.0)) 
     // Changed to: 
     make.width.height.equalTo(40.0) 
    } 

    nameLabel.snp.updateConstraints { (make) in 
     make.right.equalTo(customView).offset(-10) 
     make.left.equalTo(iconImageView.snp.right).offset(10) 

     // Add: 
     make.top.equalTo(customView.snp.top) 
     make.bottom.equalTo(customView.snp.bottom) 
    } 
} 

추가 할 수있는이 하나의 시도 서로 잘 작동하므로 다음과 비슷한 "updateConstraints"메서드에서 사용자 정의보기를 레이아웃해야합니다.

customView.snp.updateConstraints { (make) in 
    make.edges.equalTo(self) 
}