在执行自动维度时,IOS Swift TableView边框问题

时间:2016-12-09 19:43:08

标签: ios swift uitableview swift3

我有一个TableView,它有一个可变长度的列,有时文本可能很长。我通过执行建议的步骤修复了这个问题,例如将标签行放到0并在ViewLoad中包含这两行代码

<?php

for ($y=0; $y<=98 ; $y++) { 
    for ($x=0; $x<=163; $x++) {
        echo "Value of x = " . $x . " & y = " . $y . "<br>";
    }
}

修复了这个问题,但是现在我的边框颜色已经不合适了,因为例如现在它的外观[下图]我在上面添加了2行新代码时发生了这种行为。我的猜测可能是因为单元格是自动调整大小取决于传入的数据,边框不会自动调整大小并且它们变得不合适。关于如何解决这个问题有什么建议吗?这是我显示边框的代码 我有2张图片用于比较和对比

   TableSource.rowHeight = UITableViewAutomaticDimension
    TableSource.estimatedRowHeight = 150.0

With Auto Resizing cells

如果我基本上删除了2个新行的自动调整大小代码,那么TableCells就像这样。正如您所看到的那样,边框现在可以正常工作,但如果消息太长则会被截断。

enter image description here

1 个答案:

答案 0 :(得分:2)

您需要将自己的代码绘制到自定义单元格layoutSubviews()方法中,因为自定义单元格具有正确的计算宽度和高度,这是我的代码

这是一张如何看的图片

enter image description here

import UIKit

class AutoResizedCellTableViewCell: UITableViewCell {

    @IBOutlet weak var lblText: UILabel!
    override func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code
    }

    func setupWithText(text:String)
    {
        self.lblText.text = text
    }

    override func setSelected(_ selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)

        // Configure the view for the selected state
    }

    override func layoutSubviews() {
        super.layoutSubviews()

        let border = CALayer()
        let width = CGFloat(7.0)
        border.borderColor = UIColor.red.cgColor
        border.frame =  self.bounds

        border.borderWidth = width
        self.layer.addSublayer(border)
        self.layer.masksToBounds = true
    }

}

这是我的viewController代码

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var tableView: UITableView!
    let arrayOfText = ["asdasddasdadasd asdasd asd asdasdasdasdasdasdasdassdasdasdasdasdasdasdasdasdasdasdasdasd asdasdasdasdasdasdadasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdadsdasdasdasd asdasdasd asdasdasd asdasdadasd asdasdasdasdas dasdasdasd asdas dasdas dasdas dasda sdasd asdas dasdas v ad as v v v v asd as d as s asdasdasdasdada","asdasd","asdasddasdadasd asdasd asd asdasdasdasdasdasdasdassdasdasdasdasdasdasdasdasdasdasdasdasd asdasdasdasdasdasdadasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdadsdasdasdasd asdasdasd asdasdasd asdasdadasd asdasdasdasdas dasdasdasd asdas dasdas dasdas dasda sdasd asdas dasdas v ad as v v v v asd as d as s asdasdasdasdada asdasddasdadasd asdasd asd asdasdasdasdasdasdasdassdasdasdasdasdasdasdasdasdasdasdasdasd asdasdasdasdasdasdadasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdadsdasdasdasd asdasdasd asdasdasd asdasdadasd asdasdasdasdas dasdasdasd asdas dasdas dasdas dasda sdasd asdas dasdas v ad as v v v v asd as d as s asdasdasdasdada","asdasddasdadasd asdasd asd asdasdasdasdasdasdasdassdasdasdasdasdasdasdasdasdasdasdasdasd asdasdasdasdasdasdadasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdadsdasdasdasd asdasdasd asdasdasd asdasdadasd asdasdasdasdas dasdasdasd asdas dasdas dasdas dasda sdasd asdas dasdas v ad as v v v v asd as d as s asdasdasdasdada","asdasdasdasasdas asdasdasd","asdasddasdadasd asdasd asd asdasdasdasdasdasdasdassdasdasdasdasdasdasdasdasdasdasdasdasd asdasdasdasdasdasdadasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdadsdasdasdasd asdasdasd asdasdasd asdasdadasd asdasdasdasdas dasdasdasd asdas dasdas dasdas dasda sdasd asdas dasdas v ad as v v v v asd as d as s asdasdasdasdada","asdasdadas"]
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        self.tableView.rowHeight = UITableViewAutomaticDimension
        self.tableView.estimatedRowHeight = 150.0
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

}

extension ViewController : UITableViewDelegate,UITableViewDataSource{

    public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
    {
        return self.arrayOfText.count
    }


    public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
    {
        let cell = tableView.dequeueReusableCell(withIdentifier: "AutoResizedCellTableViewCell") as! AutoResizedCellTableViewCell

        cell.setupWithText(text: self.arrayOfText[indexPath.row])


        return cell
    }
}

我希望这可以帮到你,