当 UITableView 加载并在滚动后得到修复时,UILabel 向左移动
UILabel shifts to left when UITableView Loads and gets fix after scrolling
我有一个 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:
当我滚动图片 2 时:
在我的 tableView 上滚动后,每个标签都设置到它们的确切位置,尝试了很多事情,比如在故事板中重新安排我的约束,清理构建等仍然没有运气,如果有人知道出了什么问题,请帮忙
更改约束后需要更新布局:
cell!.contraint.constant = ((( CGFloat (cell!.slider.value) ) * cell!.slider.frame.width) + cell!.paddingConstraint.constant) - differnceToRemove
cell.setNeedsLayout()
cell.layoutIfNeeded()
请参阅 UIView Class Reference 文档的 "Laying out Subviews" 部分。
自动布局可能很棘手,所以我参考了 Apple 的指南 here。
编辑
您也可以在 viewDidLoad()
中使用这些方法。
tableView.setNeedsLayout()
tableView.layoutIfNeeded()
我们正在强制 table 视图重新加载它自己,从而进行另一个布局过程。这是一项解决方案,您仍然应该了解第一个布局通道和第二个布局通道之间的区别(由于您滚动)。我将从您的自定义 table 视图单元开始。
我有一个 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:
当我滚动图片 2 时:
在我的 tableView 上滚动后,每个标签都设置到它们的确切位置,尝试了很多事情,比如在故事板中重新安排我的约束,清理构建等仍然没有运气,如果有人知道出了什么问题,请帮忙
更改约束后需要更新布局:
cell!.contraint.constant = ((( CGFloat (cell!.slider.value) ) * cell!.slider.frame.width) + cell!.paddingConstraint.constant) - differnceToRemove
cell.setNeedsLayout()
cell.layoutIfNeeded()
请参阅 UIView Class Reference 文档的 "Laying out Subviews" 部分。
自动布局可能很棘手,所以我参考了 Apple 的指南 here。
编辑
您也可以在 viewDidLoad()
中使用这些方法。
tableView.setNeedsLayout()
tableView.layoutIfNeeded()
我们正在强制 table 视图重新加载它自己,从而进行另一个布局过程。这是一项解决方案,您仍然应该了解第一个布局通道和第二个布局通道之间的区别(由于您滚动)。我将从您的自定义 table 视图单元开始。