应用于字幕表视图单元格的 UITableViewAutomaticDimension 无法正常工作

Posted

技术标签:

【中文标题】应用于字幕表视图单元格的 UITableViewAutomaticDimension 无法正常工作【英文标题】:UITableViewAutomaticDimension applied on subtitle table view cell not working properly 【发布时间】:2016-08-16 12:50:07 【问题描述】:

我正在为列表创建一个视图。它在字幕中具有动态长度。所以我使用了 UITableViewAutomaticDimension 属性。我没有应用任何约束,因为两个标签都是表格视图单元格属性,所以不需要创建新的自定义单元格。

但是在运行这个项目之后,我标记了 UITableViewAutomaticDimension 不能正常工作。我不知道我做错了什么。我的代码如下所示

视图确实加载了

@IBOutlet weak var tblabc: UITableView!
    override func viewDidLoad() 
        super.viewDidLoad()

        tblabc.separatorColor = UIColor.clearColor()

        tblabc.estimatedRowHeight = 44
        tblabc.rowHeight = UITableViewAutomaticDimension



        // Do any additional setup after loading the view.
    

表视图委托和数据源

func numberOfSectionsInTableView(tableView: UITableView) -> Int 
        return 1
    
    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
        return 5
    
    func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat 
        return UITableViewAutomaticDimension
    
    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
    
        var cell = tableView.dequeueReusableCellWithIdentifier("Cell")
        if (cell == nil)
        

            cell = UITableViewCell(style: .Subtitle, reuseIdentifier: "Cell")
            cell?.selectionStyle = .None
            cell?.detailTextLabel?.font = _SETREGULARFONT_KARLA(IS_IPAD ? 19:15)
            cell?.textLabel?.font = _SETBOLDFONT_KARLA(IS_IPAD ? 17:13)
            cell?.detailTextLabel?.textColor = getColorFromRGB(120, G: 132, B: 158, A: 1.0)
            cell?.detailTextLabel?.numberOfLines = 0
            cell?.detailTextLabel?.lineBreakMode = .ByTruncatingTail
            cell?.selectionStyle = .None

        

        cell?.textLabel?.text = "Testing" + "\(indexPath.row)"
        cell?.detailTextLabel?.text = "tesfhjdsfskdfhjkfhdjskfhsjkdfhdjsxdfgfjljkgjfklgfhsdjfhjkdshfdjskfhdjfjkfhafyhdsifjhdjksfbshdjkfkhdksjfhdjsfyhds8ufdhsfjkhdsfjhdfudsiufhdsfh"
        cell?.imageView?.image = UIImage(named: "new_temp")

        return cell!
    

查看如下图所示

【问题讨论】:

请参考以下链接***.com/questions/36587126/… 【参考方案1】:

当您有一个 多行 detailTextLabel 时,内置 UITableViewCellStyles(全部!)的 UITableViewAutomaticDimension 高度计算基本上是“损坏”的。正如 Venkat Reddy 评论的那样,请在此处查看我的解决方案:Autolayout ignores multi-line detailTextLabel when calculating UITableViewCell height (all styles)

[具有适当权限的人应考虑将此问题标记为重复问题]

【讨论】:

【参考方案2】:

检查此修改代码:-

func numberOfSectionsInTableView(tableView: UITableView) -> Int 
    return 1

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
    return 5

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell

    var cell = tableView.dequeueReusableCellWithIdentifier("Cell")
    if (cell == nil)
    

        cell = UITableViewCell(style: .Subtitle, reuseIdentifier: "Cell")
        cell?.selectionStyle = .None
        cell?.detailTextLabel?.font = _SETREGULARFONT_KARLA(IS_IPAD ? 19:15)
        cell?.textLabel?.font = _SETBOLDFONT_KARLA(IS_IPAD ? 17:13)
        cell?.detailTextLabel?.textColor = getColorFromRGB(120, G: 132, B: 158, A: 1.0)
        cell?.detailTextLabel?.numberOfLines = 0
        cell?.detailTextLabel?.lineBreakMode = .ByTruncatingTail
        cell?.selectionStyle = .None

    

    cell?.textLabel?.text = "Testing" + "\(indexPath.row)"
    cell?.detailTextLabel?.text = "tesfhjdsfskdfhjkfhdjskfhsjkdfhdjsxdfgfjljkgjfklgfhsdjfhjkdshfdjskfhdjfjkfhafyhdsifjhdjksfbshdjkfkhdksjfhdjsfyhds8ufdhsfjkhdsfjhdfudsiufhdsfh"
    cell?.imageView?.image = UIImage(named: "new_temp")

    return cell!

请移除 HeightForRowAtIndex 数据源方法。

【讨论】:

【参考方案3】:

这个问题应该在 ios 11 中得到解决。在较低版本上运行良好的快捷解决方案是通过将其 textlabel.attributedText 设置为具有更粗的第一行 + \n 在基本单元格中伪造所需的字幕外观+ 常规更多行。

【讨论】:

【参考方案4】:

试试这个代码:

func tableView(tableView: UITableView, estimatedHeightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat 
        return UITableViewAutomaticDimension
    

删除两行:

tblabc.estimatedRowHeight = 44
tblabc.rowHeight = UITableViewAutomaticDimension

【讨论】:

估计行高不应该是 UITableViewAutomaticDimension,它应该是一个实数,以帮助系统在自动布局确定动态行高之前计算行高的估计值。

以上是关于应用于字幕表视图单元格的 UITableViewAutomaticDimension 无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

字幕单元格的 Swift 自动行高

带有有限单元格的集合视图滚动

集合视图中单元格的宽度不正确

有没有办法获取单元格的字幕长度(detailedTextLabel)?

如何使用来自另一个视图控制器swift的用户输入创建具有表视图单元格的列表

应用于控制器的背景未应用于故事板swift中的表格视图单元格