2016-11-25 10 views
0

UIビューをテーブルビューセルのコンテンツビューにロードしていますが、テーブルビューをスクロールすると1つのセルしか表示されません。各セルの正しいビューがロードされますが、1つしかロードされず、新しいセルが下から表示されると消えます。すべてのデータは、関数makeTableViewRowView(uiviewをポピュレートする文字列の配列)を介してローカルにロードされます。TableViewは、スクロールしながら1つのセルの内容をロードするだけです。

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
     let cell = tableView.dequeueReusableCell(withIdentifier: expenseCell, for: indexPath) 
     tableViewRow = makeTableViewRowView(indexPath: indexPath) 
     tableViewRow.translatesAutoresizingMaskIntoConstraints = false 
     cell.contentView.addSubview(tableViewRow) 
     cell.selectionStyle = .none 

     let margins = cell.contentView.layoutMarginsGuide 
     tableViewRow.centerYAnchor.constraint(equalTo: margins.centerYAnchor).isActive = true 
     tableViewRow.leadingAnchor.constraint(equalTo: margins.leadingAnchor).isActive = true 
     tableViewRow.trailingAnchor.constraint(equalTo: margins.trailingAnchor).isActive = true 
     tableViewRow.heightAnchor.constraint(equalToConstant: 40).isActive = true 
     return cell 
    } 

broken tableView

+1

'tableViewRow'とは何ですか? –

+0

@ Mr.BistaそれはUIViewの原因を保持する単なるプロパティです。なぜなら、 'tableViewRow'は一度しか初期化されていないため、UIView –

+0

が返されます。なぜなら、最後のセルでの存在が –

答えて

0

インターフェイスビルダーとdequeそれでカスタムセルを作ります。そのセルの要件に応じて変更を加えてcellForRowAtIndexPath!あなたのセルがdequeになるときにcellForRowAtIndexPathが呼び出されるので、私はセルが再利用されることを意味します!だから、cellforrowでビューを作成し、それをサブビューとして追加するのは良い解決策ではありません、あなたは直接インターフェイスビルダーから追加することができ、cellforrow要件でそれを操作することができます!

+0

良い考えですが、このプロジェクトではIBを使用していません。ハムザの答えが私のために働いた。 –

関連する問題