2016-08-05 5 views
1

일부 맞춤형 레이아웃을 레이아웃하려고하는데 제약 조건을 활성화하려고하면 Xcode에서 배율을 사용할 수 없다고 말합니다.iOS 제약 조건에서 배율을 사용할 수 없습니다.

class MenuView: UIView { 

    var addButton: AddButton! 
    var settingsButton: SettingsButton! 

    // ........ 

    func setConstraints (withBarReference reference: NSLayoutYAxisAnchor) { 
     NSLayoutConstraints.activateConstraints([ 
      // ........ 
      addButton.centerXAnchor.constraintEqualToAnchor(self.centerXAnchor, multiplier: 0.5), 
      // ........ 
      settingsButton.centerXAnchor.constraintEqualToAnchor(self.centerXAnchor, multiplier: 1.5) 
     ]) 
    } 

} 

여기 일이 엑스 코드는 contraintEqualToAnchor에 구문 오류 준다이다 : 다음은 코드의 예입니다 기능을 내가 "멀티 플라이어"에서 "상수"대체해야한다고 말한다.

멀티 센터 옵션을 X 센터 앵커에 사용할 수없는 이유는 무엇입니까?

+0

를 입력하여이 제약 조건을 활성화하는 것을 잊지 마세요 그들의 " 승수 "매개 변수를 사용하면"상수 "만 변경할 수 있습니다. –

+0

.isActive = true를 놓치지 않았습니까? –

답변

1

NSLayoutXAxisAnchor 앵커에는 승수를 사용할 수 없습니다. 선상의 위치를 ​​곱하면 제약 시스템에서 이해할 수있는 방식으로 이해가되지 않습니다. 곱셈기는 NSLayoutDimension 앵커와 함께 사용할 수 있으며 너비는 길이는입니다.

레이아웃을 만들려면 스택보기를 사용하는 것이 좋습니다.

+0

IB는 "이해가되지 않더라도"이렇게 할 수 있습니다. 결과를 달성하는 데있어 실제로는 때로는 가장 효율적인 방법입니다. 예를 들어보기의 왼쪽을 부모보기의 1/4 선에 맞 춥니 다. 그럴 것입니다. 레프트 앵커는 superview.centerX를 0.5 배수로 제한하거나 3/4 라인을 1.5로 제한했습니다. 이 기능이 없으면 안내선 스냅에만 사용되는 보이지 않는보기를 만들어야합니다. 코드를 통해 수행하는 방법에 대한 내 대답을 참조하십시오. –

1

IB에서 멀티 플라이어 옵션을 Center X와 함께 사용하여 찾고있는 효과를 얻을 수있는 것 같습니다 (버튼 1의 중심을 화면의 너비 1/4로 설정하고 button2의 중심을 보기의 너비의 2/3 정도) :
setting the center of a button at 1/4 the width of the view it's in, using the Interface Builder. setting the center of a button at 2/3 the width of the view it's in, in StoryBoard

나는 코드와 IB 둘 다에서 그것을 사용하려고 시도했다. 그리고 코드에서 나는 당신과 같은 오류를 얻었다. 놀랍게도 IB에서는 오류없이 경고없이 작동했습니다. (나는 Xcode 7을 사용하고 있으며, 여전히 작동하는지 Xcode 8에서 시도 할 것입니다.)

0

이 같은 결과가 : 당신이 도우미 기능을 사용하여 승수 설정할 수 없습니다

//old settingsButton.centerXAnchor.constraintEqualToAnchor(self.centerXAnchor, multiplier: 1.5) 
//working settingsButton.centerXAnchor.constraintEqualToAnchor(self.centerXAnchor, constant: self.frame.width/2 * 0.5) 
+0

프레임 너비가 변경되면 제약 조건이 반영되지 않기 때문에 그렇지 않습니다. –

1

을,하지만 당신은 NSLayoutConstraint 이니셜을 사용하여 배율을 설정할 수 있습니다. 그냥 내 자신에 의해 붙어있어,하지만 대답을 발견.

귀하의 코드 : addButton.centerXAnchor.constraintEqualToAnchor(self.centerXAnchor, multiplier: 0.5)

올바른 코드 : 또한 NSLayoutConstraint(item: addButton, attribute: .centerX, relatedBy: .equal, toItem: self, attribute: .centerX, multiplier: 0.5, constant: 0)

는, 당신은 변경할 수 없습니다, 제약 조건이 이미 존재하는 경우 isActive = true