当UITableView加载时UILabel向左移动并在滚动

时间:2016-05-20 12:36:27

标签: ios swift uitableview autolayout uilabel

我有一个tableView,其中我推出了一个UILabel并且我动态地更改了它的左约束常量: 我的TableViewController

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




    //let totalLength = (cell.slider.frame.width + (cell.postNumber.frame.width + cell.negNumber.frame.width + cell.middleConstraint.constant))
    let differnceToRemove = (cell!.postNumber.frame.width + cell!.negNumber.frame.width + cell!.middleConstraint.constant) / 2

    if indexPath.row == 0 {
        cell!.slider.value = 0

    }else if indexPath.row == 1 {
        cell!.slider.value = 1.0
        }
    else if indexPath.row == 2 {
        cell!.slider.value = 0.5
    }
    else if indexPath.row == 3 {

        cell!.slider.value = 0.25
    }
    else if indexPath.row == 4 {
        cell!.slider.value = 0.33
    }


    cell!.contraint.constant =  ((( CGFloat (cell!.slider.value) ) * cell!.slider.frame.width) + cell!.paddingConstraint.constant) - differnceToRemove



    let leftTrackImage = UIImage(named: "vLine")
    cell!.slider.setThumbImage(leftTrackImage, forState: .Normal)
    cell!.slider.setThumbImage(leftTrackImage, forState: .Selected)
    cell!.slider.setThumbImage(leftTrackImage, forState: .Highlighted)


    return cell!
}

我的TableViewCell:

class TableViewCell: UITableViewCell {


    @IBOutlet var paddingConstraint: NSLayoutConstraint!
    @IBOutlet var postNumber: UILabel!
    @IBOutlet var negNumber: UILabel!
    @IBOutlet var middleConstraint: NSLayoutConstraint!

    @IBOutlet var contraint: NSLayoutConstraint!

    @IBOutlet var slider: CustomSlider!

    override func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code
    }
当tableView加载时,

图像1:image 1 when View loads

当我滚动它时,

图像2:

image 2 after scrolling

滚动我的tableView后,每个标签设置到他们的确切位置,尝试了很多事情,如在故事板中重新安排我的约束,干净的构建等仍然没有运气如果有人知道什么是错的那么请帮忙

1 个答案:

答案 0 :(得分:1)

更改约束后需要更新布局:

cell!.contraint.constant =  ((( CGFloat (cell!.slider.value) ) * cell!.slider.frame.width) + cell!.paddingConstraint.constant) - differnceToRemove
cell.setNeedsLayout()
cell.layoutIfNeeded()

请参阅UIView Class Reference文档的“布局子视图”部分。

自动布局可能很棘手,因此我引用Apple的指南here

修改

您也可以在viewDidLoad()中使用这些方法。

tableView.setNeedsLayout() 
tableView.layoutIfNeeded() 

我们强制表视图重新加载它自己,从而做另一个布局传递。这是一个你周围的工作仍然应该锻炼第一个布局传递和第二个布局传递之间的差异(由于你滚动)。我将从您的自定义表格视图单元格开始。