在UITableView中改变分隔符颜色

时间:2017-08-19 06:20:08

标签: swift uitableview

我的应用中有一个帐户页面,我希望在桌面视图的第一部分上方显示帐户信息,类似于设置中的Apple ID页面。

AppleIDPage

我的问题是基于如何构建视图,使得在个人资料图片上方没有显示分隔符。或者使信息显示在tableview内,但不在一个部分内。

从阅读中看,似乎不可能或很难让一些分隔符显示而其他分隔符不显示。

在苹果ID页面的情况下,该图片,名称和电子邮件是在其自己的部分中还是属于其下方部分的单元格?

以下图片是我最接近的图片,尽管顶部分隔符很难隐藏。

MyAttempt

对问题的广泛性质表示道歉,但我认为目标很明确,一旦达成解决方案,我将使问题对未来的观众更具体。

感谢。

3 个答案:

答案 0 :(得分:1)

试试这个

//这将隐藏所有行的分隔符

tableView.separatorStyle = UITableViewCellStyle.None 

//对于自定义分隔符

if indexPath.row != 0{
        var aView: UIView = UIView()
        aView.frame = CGRect(x:0,y:44,width:300,height:1)
        aView.backgroundColor = UIColor.redColor()
        cell .addSubview(aView)
}

答案 1 :(得分:1)

您需要在custom view中使用UITableViewCell

1。UITableView中将Separator none设为storyboard

2。创建一个自定义UITableViewCell,其中包含UIView

class TableCell: UITableViewCell
{
    @IBOutlet weak var separatorView: UIView!
}

3。根据您的要求在backgroundColor中设置separatorView的{​​{1}}。

示例:

cellForRowAt

<强>截图:

enter image description here

答案 2 :(得分:0)

感谢Dev和PGDev,我能够提出一个适用于static cells的好解决方案。我为extension制作了UITableViewCell,看起来像这样。

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()中,您只需选择顶部和底部separator的插图以及它们是否可见。

screenshot1 screenshot2

<强> TOPCELL 因此,对于上面图片中显示cell的{​​{1}},顶部和底部name label都可见。但是因为它应该显示为该部分中的第一个separators,所以它没有顶部插入和适当的底部插入。

<强> MiddleCell 对于cellcell的情况,只有email label(带插入)可见,因为上面的separator底部有cell。< / p>

<强> BottomCell 对于separator cellpassword label只有separator(没有偏移)可见,因为上面的cell底部有separator

<强> SpecialCase btnSeparator()函数仅用于帮助和支持按钮的情况,我希望双方都插入。

现在要实现此extension,我在switch statement函数中使用cellForRowAt为每个cell提供了适当的extension,这就是看起来的样子像:

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
    }

务必在separator中将Storyboard设为无,或使用:

tableView.separatorStyle = UITableViewCellStyle.None