2017-12-06 22 views
0

제약 조건으로 프로그래밍 방식으로 UIButtons를 만들려고합니다. 그것은 배열의 항목을 기준으로 버튼을 만들어야합니다.제약 조건 또는 앵커가 다른 뷰 계층 구조에서 항목을 참조합니까? 그건 불법이야

저는 storyView에서 UIView 콘센트를 viewSingle로 가져 왔으며 맨 앞과 맨 아래, 후행 및 높이 제약을 받았습니다. 이제 UIButton을 프로그래밍 방식으로 제약하려고 할 때 아래에서 언급 한 오류가 발생합니다.

for (index,item) in (self.planModel.plan_settings?.sticky_buttons?.enumerated())!{ 

     var btnOne = UIButton() 
     var btnSecond = UIButton() 
     var btnThird = UIButton() 

     let totalItems = self.planModel.plan_settings?.sticky_buttons?.count ?? 1 

     let multiplier = (UIScreen.main.bounds.width/CGFloat(totalItems))/UIScreen.main.bounds.width 
     switch index { 
     case 0: 
      btnOne = UIButton(type: UIButtonType.system) 
      btnOne.backgroundColor = UIColor.green 
      viewSingle.addSubview(btnOne) 

      btnOne.translatesAutoresizingMaskIntoConstraints = false 
      NSLayoutConstraint.activate([ 
       btnOne.leadingAnchor.constraint(equalTo: viewSingle.leadingAnchor, constant: 0), 
       btnOne.topAnchor.constraint(equalTo: viewSingle.topAnchor, constant: 0), 
       // button.widthAnchor.constraint(equalTo: viewSingle!.widthAnchor, constant: 0), 
       btnOne.heightAnchor.constraint(equalTo: viewSingle!.heightAnchor, constant: 0), 
       btnOne.widthAnchor.constraint(equalTo: viewSingle.widthAnchor, multiplier: multiplier, constant: 0) 
       ]) 
      self.view.layoutIfNeeded() 
     case 1: 
      btnSecond = UIButton(type: UIButtonType.system) 
      btnSecond.backgroundColor = UIColor.yellow 
      viewSingle.addSubview(btnSecond) 

      btnSecond.translatesAutoresizingMaskIntoConstraints = false 
      NSLayoutConstraint.activate([ 
       btnSecond.leadingAnchor.constraint(equalTo: btnOne.leadingAnchor, constant: 0), 
       btnSecond.topAnchor.constraint(equalTo: viewSingle.topAnchor, constant: 0), 
       // button.widthAnchor.constraint(equalTo: viewSingle!.widthAnchor, constant: 0), 
       btnSecond.heightAnchor.constraint(equalTo: viewSingle!.heightAnchor, constant: 0), 
       btnSecond.widthAnchor.constraint(equalTo: viewSingle.widthAnchor, multiplier: multiplier, constant: 0) 
       ]) 
      self.view.layoutIfNeeded() 

     case 2: 
      btnThird = UIButton(type: UIButtonType.system) 
      btnThird.backgroundColor = UIColor.orange 
      viewSingle.addSubview(btnThird) 

      btnThird.translatesAutoresizingMaskIntoConstraints = false 
      NSLayoutConstraint.activate([ 
       btnThird.leadingAnchor.constraint(equalTo: viewSingle.leadingAnchor, constant: 0), 
       btnThird.topAnchor.constraint(equalTo: viewSingle.topAnchor, constant: 0), 
       // button.widthAnchor.constraint(equalTo: viewSingle!.widthAnchor, constant: 0), 
       btnThird.heightAnchor.constraint(equalTo: viewSingle!.heightAnchor, constant: 0), 
       btnThird.widthAnchor.constraint(equalTo: viewSingle.widthAnchor, multiplier: multiplier, constant: 0) 
       ]) 
      self.view.layoutIfNeeded() 
     default: 
      break 
     } 


    } 

오류 : -

2017-12-06 19:16:03.601661+0530 WayOL[8637:3028327] *** Terminating app due to uncaught exception 'NSGenericException', reason: 'Unable to activate constraint with anchors and because they have no common ancestor. Does the constraint or its anchors reference items in different view hierarchies? That's illegal.'

사람이이 문제를 해결하는 데 도움이 수 있습니까? 그래서

for (index,item) in (self.planModel.plan_settings?.sticky_buttons?.enumerated())!{ 

     var btnOne = UIButton() 
     var btnSecond = UIButton() 
     var btnThird = UIButton() 

     // rest of code inside loop 
} 

, 루프를 통해 처음으로, index 0에 해당하고, 당신이로 btnOne을 추가

+0

코드로 무엇을 하려는지 잘 모르겠지만 표시하지 않았을 수 있습니다. 그러나 하위 뷰를 추가하는 위치가 표시되지 않습니다. – dfd

+0

당신이하려는 일을 이해하기가 어렵습니다 ... 너는 같은 너비로'viewSingle'에 1, 2 또는 3 버튼을 추가하는 것이 목표입니까? – DonMag

답변

1

귀하의 주요 문제는 루프를 통해 NEW 버튼마다 만드는 것입니다 하위보기는 viewSingle입니다.

루프를 통해 다음 시간, 당신은 만들 새로운btnOne - 당신은 viewSinglebtnSecond를 추가하고 추가되지 않은 새로운btnOne, 그것을 제한하려고 ~ viewSingle. 당신이 당신의 3 버튼 외부 루프를 바르 만드는 경우

- 같은 당신이 viewSingle을 만들 때와 같은 수준으로, 다음 루프 내부에서 어떤 = UIButton(...) 문을 제거, 당신은 오류가 발생하지 않습니다.

전체 totalItemsmultiplier 계산과 나머지 제약 조건이 실제로 원하는대로 수행되는지는 확실하지 않습니다. 접근 방법을 다시 생각해야 할 수도 있습니다 (당신이하는 일을 보여 주거나 설명하지 않았으므로 말하기 힘듭니다).

+0

감사합니다 :) 그것은 작동합니다 .. –