제약 조건으로 프로그래밍 방식으로 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
을 추가
코드로 무엇을 하려는지 잘 모르겠지만 표시하지 않았을 수 있습니다. 그러나 하위 뷰를 추가하는 위치가 표시되지 않습니다. – dfd
당신이하려는 일을 이해하기가 어렵습니다 ... 너는 같은 너비로'viewSingle'에 1, 2 또는 3 버튼을 추가하는 것이 목표입니까? – DonMag