swiftでUITableViewの中にコードからUI部品を設置してNSなんとかAnchorで制約をつけています。
Viewをロードした直後は上手く表示されているのですがスクロールによって一度画面上から消えた後にもう一度スクロールして画面に現れたときに、本来の制約の場所だけでなく、全てのUI部品が一つずつCellの左上のところに表示されてしまいます。どのようにしたらこれを防げますか。
swift
1func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 2 guard let cell = tableView.dequeueReusableCell(withIdentifier: "allotCell", for: indexPath) as? AllotTableViewCell else { 3 return UITableViewCell() 4 5 } 6 let instance = greatInstance[indexPath.row] 7 let comission = UILabel() 8 comission.textColor = UIColor.black 9 comission.backgroundColor = UIColor.white 10 comission.text = instance.name 11 comission.translatesAutoresizingMaskIntoConstraints = false 12 cell.addSubview(comission) 13 14 comission.topAnchor.constraint(equalTo: cell.topAnchor, constant: 10).isActive = true 15 16 comission.heightAnchor.constraint(equalToConstant: 30).isActive = true 17 18 comission.trailingAnchor.constraint(equalTo: cell.trailingAnchor, constant: 10).isActive = true 19 comission.leadingAnchor.constraint(equalTo: cell.leadingAnchor, constant: 10).isActive = true 20 21 for i in PrimeCommission.sharedInstance.schoolFestival.allots { 22 23 let label = UILabel() 24 25 26 label.textColor = UIColor.black 27 label.backgroundColor = UIColor.white 28 label.text = i.name 29 label.translatesAutoresizingMaskIntoConstraints = false 30 // Initialization code 31 32 cell.addSubview(label) 33 cell.labels.append(label) 34 35 let image = SpecialButton() 36 print ("a") 37 image.translatesAutoresizingMaskIntoConstraints = false 38 image.superTag["Commission"] = greatInstance.firstIndex(of: instance)! 39 image.superTag["Allot"] = PrimeCommission.sharedInstance.schoolFestival.allots.firstIndex(of: i) 40 41 image.addTarget(self, action: #selector(buttonEvent(_:)), for: UIControl.Event.touchUpInside) 42 if instance.allot.contains(i){ 43 image.setImage(UIImage(named: "無題118"), for: .normal) 44 45 }else{ 46 image.setImage(UIImage(named: "無題119"), for: .normal) 47 48 } 49 50 cell.addSubview(image) 51 cell.images.append(image) 52 print("c") 53 54 } 55 56 57 58 for i in 0...PrimeCommission.sharedInstance.schoolFestival.allots.count - 1 { 59 60 var ta :NSLayoutYAxisAnchor 61 62 if i == 0 { 63 ta = comission.bottomAnchor 64 65 print (i) 66 } else { 67 ta = cell.labels[i-1].bottomAnchor 68 print(i) 69 } 70 ///* 71 cell.images[i].centerYAnchor.constraint(equalTo: cell.labels[i].centerYAnchor).isActive = true 72 cell.images[i].trailingAnchor.constraint(equalTo: cell.trailingAnchor, constant: -10).isActive = true 73 cell.images[i].heightAnchor.constraint(equalToConstant: 35).isActive = true 74 cell.images[i].widthAnchor.constraint(equalToConstant: 35).isActive = true 75 cell.labels[i].topAnchor.constraint(equalTo: ta, constant: 10).isActive = true 76 cell.labels[i].heightAnchor.constraint(equalToConstant: 30).isActive = true 77 78 79 cell.labels[i].leadingAnchor.constraint(equalTo: cell.leadingAnchor, constant: 10).isActive = true 80 81 82 83 cell.labels[i].trailingAnchor.constraint(equalTo: cell.images[i].leadingAnchor, constant: 10).isActive = true 84 85 if i == PrimeCommission.sharedInstance.schoolFestival.allots.count-1 { 86 cell.labels[i].bottomAnchor.constraint(equalTo: cell.bottomAnchor, constant: -10).isActive = true 87 88 } 89 //*/ 90 91 92 93 } 94 95 return cell 96 }
どうやらadd subviewが蓄積されるらしいという所まではわかったのですが、どうしたら良いかわかりません
回答2件
あなたの回答
tips
プレビュー