iOS如何获取tableview单元格中整行的宽度

时间:2016-03-25 04:00:05

标签: ios swift uitableview

我试图将细胞的左半部分染成绿色,将细胞的右半部分染成红色。在评论cell.frame.width之前,请检查我已完成的代码段HERE以及我得到的结果。我们可以注意到有一些空白跟踪。我的猜测是cell.frame没有给我正确的框架。

非常感谢任何可以达到相同结果的帮助或其他方法!

更新:表格视图和约束Here

2 个答案:

答案 0 :(得分:1)

更好地使用自动布局,它将使应用程序在两个方向上都能正常工作。

并且在你的实现中,每次为每个单元格调用cellForRowAtIndexPath方法时都会创建bgView,因此最好检查bgView是否为nil而不是仅创建bgView。 请参考以下代码。

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("CellID", forIndexPath: indexPath)

    cell.backgroundColor = UIColor.clearColor()

    if cell.backgroundView == nil {

        let leftView = UIView()
        let rightView = UIView()
        rightView.backgroundColor = UIColor.redColor()
        leftView.backgroundColor = UIColor.yellowColor()
        cell.backgroundView = UIView()
        cell.backgroundView?.addSubview(leftView)
        cell.backgroundView?.addSubview(rightView)
        leftView.translatesAutoresizingMaskIntoConstraints = false;
        rightView.translatesAutoresizingMaskIntoConstraints = false;

        let viewDict = ["leftView":leftView, "rightView":rightView]

        cell.backgroundView!.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|-0-[leftView]-0-|", options: [], metrics: nil, views: viewDict))
        cell.backgroundView!.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|-0-[rightView]-0-|", options: [], metrics: nil, views: viewDict))

        cell.backgroundView!.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|-0-[leftView]-0-[rightView(==leftView)]-0-|", options: [], metrics: nil, views: viewDict))

    }

    cell.textLabel?.text = "dsfsdkjfh fkjhsdkjfhs kdfksdhfk sdf";
    return cell

}

答案 1 :(得分:1)

这可能有很多原因。你可以试试几件事:

单元格可能为附件视图腾出空间,例如复选标记,箭头等。尝试将单元格的附件类型设置为.None:

cell.accessoryType = .None

不是为右侧添加视图,而是尝试设置单元格的背景颜色,然后将左侧设置为view.width / 2

cell.backgroundColor = UIColor.redColor
let leftViewFrame = cell.bounds
leftViewFrame.width = view.frame.width / 2.0
let leftView = UIView(frame: leftViewFrame)

另一个潜在问题可以在viewDidLoad中解决:

self.automaticallyAdjustsScrollViewInsets = false