ios - 当 UITableView 加载并在滚动后得到修复时,UILabel 向左移动

标签 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 上滚动后,每个标签都设置到它们的确切位置,尝试了很多事情,比如在 Storyboard中重新安排我的约束,清理构建等仍然没有运气,如果有人知道出了什么问题,那么请提供帮助

最佳答案

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

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

参见 UIView Class Reference 的“布局 subview ”部分文档。

自动布局可能很棘手,所以我引用了 Apple 的指南 here .

编辑

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

tableView.setNeedsLayout() 
tableView.layoutIfNeeded() 

我们强制 TableView 重新加载它自己,从而进行另一个布局过程。这是一项解决方案,您仍然应该了解第一个布局 channel 和第二个布局 channel 之间的区别(由于您滚动)。我将从您的自定义表格 View 单元开始。

关于ios - 当 UITableView 加载并在滚动后得到修复时,UILabel 向左移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37346919/

相关文章:

android - phonegap/cordova 的 Media 类是否克服了 html5 中 iOS/android 音频的限制?

ios - BurSTLy OAIAutoRefreshManager 显示插页式广告而应用程序没有请求它们

ios - 我是在添加另一个或更改此约束吗?

swift - 变量类型声明之间的区别?

ios - 拉动刷新抛出这个错误

ios - 在 Swift 中访问函数外部的变量

ios - 使用一对多关系对 fetchRequest 进行排序(核心数据)?

ios - 来自字典的 JSON 编码 [无法调用 'dataWithJSONObject ...]

ios - 将数据传递给 UITableViewCell iOS

ios - Storyboard两个场景。将场景 2 中的 UITableViewCell 中的文本获取到场景 1 中的 UILabel