感謝のDevとPGDev、私はstatic cells
のためによく働いた素敵な解決策を考え出すことができました。私はUITableViewCell
のためにextension
を作った。最初の関数separator()
で
let separatorColour = UIColor(red: 200/255, green: 200/255, blue: 200/255, alpha: 0.5)
extension UITableViewCell {
func separator(topInset: CGFloat, btmInset: CGFloat, showTop: Bool, showBtm: Bool) {
if showTop {
let topSeparator: UIView = UIView()
topSeparator.frame = CGRect(x: topInset, y: 0, width: frame.width, height: 0.5)
topSeparator.backgroundColor = separatorColour
addSubview(topSeparator)
}
if showBtm {
let btmSeparator: UIView = UIView()
btmSeparator.frame = CGRect(x: btmInset, y: frame.height - 0.5, width: frame.width, height: 0.5)
btmSeparator.backgroundColor = separatorColour
addSubview(btmSeparator)
}
}
func btnSeparator() {
let topSeparator: UIView = UIView()
topSeparator.frame = CGRect(x: 0, y: 0, width: frame.width, height: 0.5)
topSeparator.backgroundColor = separatorColour
addSubview(topSeparator)
let btmSeparator: UIView = UIView()
btmSeparator.frame = CGRect(x: 16, y: frame.height - 0.5, width: frame.width - 32, height: 0.5)
btmSeparator.backgroundColor = separatorColour
addSubview(btmSeparator)
}
}
あなたは単に上部と下部separator
のため、彼らが表示されているか否かのインセットを選択することができます。上の写真に示すname label
、上部及び底部の両方separators
とcell
の場合
TopCell だからが見えます。しかし、セクション内に最初のcell
として表示されるはずであるため、上部のインセットと適切な下部のインセットがありません。それだけ有するemail label
とcell
の場合
MiddleCell 下部cell
が上記底separator
separator
を有するもの(挿入図とともに)見えます。 password label
とcell
についてBottomCell
、それだけ低いseparator
cell
が上記底separator
を有するように見える(オフセットなし)を有しています。
SpecialCase btnSeparator()
機能はちょうど私が両側に差し込またかっヘルプとサポートボタンの場合のためでした。
は今、このextension
を実装するために、私は、各cell
に適切なextension
を与えることcellForRowAt
関数内switch statement
を使用し、これはそれがどのように見えるかです:
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = super.tableView(tableView, cellForRowAt: indexPath)
let inset: CGFloat = 16
switch indexPath {
// First Section
case [0,1]:
cell.separator(topInset: 0, btmInset: inset, showTop: true, showBtm: true)
case [0,2]:
cell.separator(topInset: inset, btmInset: inset, showTop: false, showBtm: true)
case [0,3]:
cell.separator(topInset: inset, btmInset: 0, showTop: false, showBtm: true)
// Second Section
case [1,0]:
cell.separator(topInset: 0, btmInset: inset, showTop: true, showBtm: true)
case [1,1]:
cell.separator(topInset: inset, btmInset: inset, showTop: false, showBtm: true)
case [1,2]:
cell.separator(topInset: inset, btmInset: 0, showTop: false, showBtm: true)
// Third Section
case [2,0]:
cell.btnSeparator()
case [2,1]:
cell.separator(topInset: inset, btmInset: 0, showTop: false, showBtm: true)
case [2,3]:
cell.separator(topInset: 0, btmInset: 0, showTop: true, showBtm: true)
default:
print("default")
}
return cell
}
はStoryboard
で誰にも負けないseparator
を設定してくださいまたは使用:
tableView.separatorStyle = UITableViewCellStyle.None
私はDEFAを隠し、セパレーターのようにそれを置き、カスタムセルに 'UIView'を追加しています超分離器なので、隠す/表示する/色を付けるのは簡単です – JuicyFruit