2016-11-20 5 views
0

cellForRowAtIndexPathのような方法でセルをロードするのは苦労しています.1つのセルのみにカスタムオフセットを与えることができます。私の場合は、セル1、セクション1にのみカスタムオフセットを与えたいと思います。同じセル(xib)がプロジェクトの他の部分で使用されているので、オフセットのないテーブルの端まで拡張されます。すべてのセルは* .xibファイルとして設計されています。私はawakeFromNib()やその他の方法で何かを設定したいと思っています。作成時にUITableViewCellにオフセットを追加しますか?

enter image description here

作成時またはセルのロード時にセルオフセット、インセット、マージン、パディング(正しい言葉遣いについてはよく分からない)を設定する方法はありますか?

私は、このようにマージンを設定しようとしたが、それは動作しません:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    if (indexPath.section == 0) && (indexPath.row) == 0 { 
     let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! MyCell 
     cell.layoutMargins = UIEdgeInsetsMake(10, 10, 10, 10) 
     return cell 
    } 
} else { 
    // Load other cells 
} 
+1

セクションヘッダーを使用するように見えます。 – shallowThought

+0

@shallowThought興味深い考え。あなたは少し拡大できますか? 'viewForHeaderInSection'を実装しました。ここで' UITableViewCell'のサブクラスである 'MyCell()'が返されていて動作しません。私はちょうど空のヘッダを取得しています。何が間違っている可能性がありますか? – Andrej

+0

ヘッダは 'UITableViewHeaderFooterView'のサブクラスである必要があります。さらに詳しい情報はhttps://developer.apple.com/reference/uikit/uitableviewheaderfooterview – Mark

答えて

1

私はあなたがあなたのcellForRowAtIndexPath実装との緊密だと思います。マージンをセルのcontentView(セルのコンテンツのスーパービューとセルのサブビュー)に適用してみてください。クリアするためにセルの背景色を設定する必要があるかもしれません(contentViewはまだ白です)。

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    if (indexPath.section == 0) && (indexPath.row) == 0 { 
     let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! MyCell 
     cell.contentView.layoutMargins = UIEdgeInsetsMake(10, 10, 10, 10) 
     return cell 
    } 
} else { 
    // Load other cells 
} 
+0

ありがとう@マーク私は 'cell.layoutMargins = UIEdgeInsetsMake(10,10,10,10)'、 'cellのすべての組み合わせを実装しました。 contentView.layoutMargins = UIEdgeInsetsMake(10、10、10、10) 'と' cell.backgroundColor = UIColor.clear'ですが、セルはまだエッジに展開されます。何か案は? – Andrej

+0

テーブルビューはあなたの 'layoutMargins'をオーバーライドしているかもしれません。 'contentView'に' layoutMargins'を設定すると、あなたのコンテンツが(余白に固定されていれば)挿入されますが、 'contentView'自体は変更されません。 'contentView'にサブビューを追加し(すべてのラベルなどを含む)、' contentView'の余白にアンカーし、 'contentView'の背景色をクリアに設定することができます。 'contentView'のlayoutMarginsを設定することができます。 – Mark

関連する問題