2017-01-20 4 views
1

У меня есть функция, которая создает массив UIStackViews с UIButtons внутри него:Как добавить ограничения в UIStackView внутри UITableViewCell быстро программно?

func generateStackViews() -> [UIStackView] { 
    var stackViewArray = [UIStackView]() 
    let finalButtonArray = generateButtons() 
    for buttons in finalButtonArray{ 
     stackViewArray.append(createStackView(subViews: buttons)) 
    } 
    return stackViewArray 
} 

Я тогда добавить этот массив в tableViewCell:

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCell(withIdentifier: "First")! 
    cell.contentView.addSubview(generateStackViews()[indexPath.row]) 
    return cell 
} 

Все отлично работает, но когда я пытаюсь добавить ограничения приколоть stackViews к клеткам, я получаю эту ошибку:

failure in -[UITableViewCell _layoutEngine_didAddLayoutConstraint:roundingAdjustment:mutuallyExclusiveConstraints:]

I попытался добавить ограничения в функции, которая создает stackViews и в функции cellForRowAt, попытался привязать ее к contentView, ячейке и tableView, но ни один из них не работал, и я получил то же сообщение об ошибке.

Где моя логика не работает?

ответ

2

вызов этого метода для дополнительного добавления программ.

func addSubviewWithConstraint(to parentView: UIView, and childView: UIView, top:CGFloat, bottom:CGFloat, leading:CGFloat, trailing:CGFloat) { 
    parentView.addSubview(childView) 
    //Below line tells the view to not use AutoResizing 
    childView.translatesAutoresizingMaskIntoConstraints = false 
    // set top constraint 
    let topConstraint = NSLayoutConstraint(item: childView, attribute: .top, relatedBy: .equal, toItem: parentView, attribute: .top, multiplier: 1, constant: top) 
    // set Bottom constraint 
    let bottomConstraint = NSLayoutConstraint(item: childView, attribute: .bottom, relatedBy: .equal, toItem: parentView, attribute: .bottom, multiplier: 1, constant: bottom) 
    // set leading constraint 
    let leadingConstraint = NSLayoutConstraint(item: childView, attribute: .leading, relatedBy: .equal, toItem: parentView, attribute: .leading, multiplier: 1, constant: leading) 
    // set Bottom constraint 
    let trailingConstraint = NSLayoutConstraint(item: childView, attribute: .trailing, relatedBy: .equal, toItem: parentView, attribute: .trailing, multiplier: 1, constant: trailing) 
    //Add all constraints to parentView 
    parentView.addConstraint(topConstraint) 
    parentView.addConstraint(bottomConstraint) 
    parentView.addConstraint(leadingConstraint) 
    parentView.addConstraint(trailingConstraint) 
} 

и вызов вышеуказанного метода, как это.

self.addSubviewWithConstraint(to: cell.contenetView, and: stackView, top: 0, bottom: 0, leading: 0, trailing: 0) 
+0

Спасибо, что это было полезно. Я новичок, поэтому, если бы вы могли объяснить логику этого, это было бы высоко оценено –