我设计自定义表格视图单元格。当我滚动TableView时,Cell View移动第一个和最后一个单元格的x位置。不知道为什么会出现这个问题。?
我提供了一些代码和图片,以帮助您理解问题。
public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! CreateQuestionViewCell
//let cell = tableView.dequeueReusableCell(withIdentifier: "cell") as! CreateQuestionViewCell
//let subview = cell.viewWithTag(1)!
//let textDetail = cell.viewWithTag(2) as! UILabel
cell.quesLbl.text = ((arrTableData[indexPath.row] as! Question).que).convertHTMLtoSymbols()
//let edit = cell.viewWithTag(3) as? UIButton
cell.editBtn.tag = indexPath.row
cell.editBtn.addTarget(self, action: #selector(EditButActions(sender:)), for: .touchUpInside)
//let deleteBut = cell.viewWithTag(4) as? UIButton
cell.deleteBtn.tag = indexPath.row
cell.deleteBtn.addTarget(self, action: #selector(deleteButActions(sender:)), for: .touchUpInside)
if NotEditable {
cell.editBtn.isHidden = true
cell.deleteBtn.isHidden = true
} else {
cell.editBtn.isHidden = false
cell.deleteBtn.isHidden = false
}
cell.quesLbl.font = UIFont(name: "Roboto-Regular", size: 14)!
let desiredWidth: CGFloat = UIScreen.main.bounds.size.width - 60
let size: CGSize = cell.quesLbl.sizeThatFits(CGSize.init(width: desiredWidth, height: CGFloat.greatestFiniteMagnitude))
cell.quesLbl.numberOfLines = 0
cell.quesLbl.lineBreakMode = NSLineBreakMode.byWordWrapping
if NotEditable {
cell.subview.frame = CGRect.init(x: 10, y: 10, width: Int(UIScreen.main.bounds.width - 40), height: Int(20 + size.height))
} else {
cell.subview.frame = CGRect.init(x: 10, y: 10, width: Int(UIScreen.main.bounds.width - 40), height: Int(50 + size.height))
}
cell.subview.layer.cornerRadius = 2.0
cell.subview.layer.borderWidth = 1.0
cell.subview.layer.borderColor = UIColor.clear.cgColor
// SubView.layer.masksToBounds = true;
cell.subview.layer.shadowColor = UIColor.init(red: 200 / 255, green: 200 / 255, blue: 200 / 255, alpha: 1).cgColor
cell.subview.layer.shadowOffset = CGSize.init(width: 0.5, height: 0.5)
cell.subview.layer.shadowRadius = 2.0
cell.subview.layer.shadowOpacity = 1.0
cell.subview.layer.masksToBounds = false
//cell.subview.layer.shadowPath = UIBezierPath(roundedRect: cell.subview.bounds, cornerRadius: cell.subview.layer.cornerRadius).cgPath
cell.layoutIfNeeded()
return cell
}
答案 0 :(得分:0)
因此,请记住重复使用单元格,并且只要在cellForRowAt:
中向单元格添加任何内容,就会将其添加到表格显示的每个后续单元格中。
在storyboard单元原型中设置所有内容。添加按钮和子视图,设置目标,并使用故事板界面构建器添加任何约束。
然后在cellForRowAt:
中,您只需设置从单元格更改为单元格的任何内容,标签中的文本字符串或图像视图中的图像...如果您在单元格中使用按钮,请继续将按钮标记设置为cell.editBtn.tag = indexPath.row
,以便识别按钮目标函数中的单元格。但是,请避免直接在目标函数中更改单元格,而是根据标记从数据源中获取数据,并使用reloadData
重绘表格。
希望这有帮助。