UITableViewCell UIView对齐问题

时间:2017-06-07 20:31:36

标签: ios objective-c uitableview uiview swift3

我设计自定义表格视图单元格。当我滚动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
    }

enter image description here

1 个答案:

答案 0 :(得分:0)

因此,请记住重复使用单元格,并且只要在cellForRowAt:中向单元格添加任何内容,就会将其添加到表格显示的每个后续单元格中。

在storyboard单元原型中设置所有内容。添加按钮和子视图,设置目标,并使用故事板界面构建器添加任何约束。

然后在cellForRowAt:中,您只需设置从单元格更改为单元格的任何内容,标签中的文本字符串或图像视图中的图像...如果您在单元格中使用按钮,请继续将按钮标记设置为cell.editBtn.tag = indexPath.row,以便识别按钮目标函数中的单元格。但是,请避免直接在目标函数中更改单元格,而是根据标记从数据源中获取数据,并使用reloadData重绘表格。

希望这有帮助。