2016-06-21 6 views
1

要素を含むUITableViewCellを作成することは、制約を除いてプログラム的に機能しているようです。あるいはそれかもしれない。 セルが再び表示されるたびに、同じ制約が要素に追加されます。私は、tableViewをスクロールした後、同じ制約20をuiLabelに追加します。ここに私のsublcassは(凝縮)である:TableViewセル/ビジュアルフォーマット言語/同じ制約を追加し続けますか?

class TimeSlotCell: UITableViewCell { 

let lblTime = UILabel() 

var viewCons = [String:AnyObject]() 
var previousCageView:UIView! 
var myConstraints = [NSLayoutConstraint]() 


func configureCell(row:Int,cageCount:Int) { 

    lblTime.translatesAutoresizingMaskIntoConstraints = false 
    self.addSubview(lblTime) 

    placeConstraint("H:|-5-[time\(row)]", view:"time\(row)") 
    placeConstraint("V:|-17-[time\(row)]", view: "time\(row) 
} 

func placeConstraint(format:String, view:String) { 
    viewCons[view] = lblTime 
    let navViewConstraint = NSLayoutConstraint.constraintsWithVisualFormat(format, options: [], metrics: nil, views: viewCons) 
      myConstraints += navViewConstraint 
      NSLayoutConstraint.activateConstraints(myConstraints) 
    } 

そして、私のVCに私は私のcellForRowAtIndexPath内configureCell funcを呼んでいます。

既存の制約が存在するかどうかを確認する方法はありますか?私の制約の1つだけが追加できることを確認する方法はありますか?それとももっと良い解決策がある人がいますか?前もって感謝します。

+0

addSubviewと制約をイニシャライザに配置すると作業が完了しました。ありがとう。 – Avenious

答えて

0

tableViewのdataSourceがあります。セルを設定すると、セルにセルモデルが送信されます。データソースが変更されるたびに、セルに送信されるセルモデルも変更されます。だからあなたがする必要があるのは、ほとんどの 'addSubview'をセルの初期化に移すことです。セルモデルでcell.contentView.addSubviewを実行する必要がある場合。セルに送信するセルモデルが前のセルモデルと同じかどうかを判断する必要があります。等しい場合は何もせず、そうでない場合はビューの設定をリセットします。

関連する問題