【问题标题】:Auto-Resizing tableViewCells in iOS8 still truncate UILabel textiOS 8 中的自动调整表格视图单元格仍然会截断 UILabel 文本
【发布时间】:2014-08-12 17:50:29
【问题描述】:

我一直在尝试使用新方法来调整 iOS8 中的 UITableView 单元格的大小,并且在一定程度上它可以工作。我首先确保将标签附加到单元格的容器视图的顶部、底部、尾随侧和前导侧,这是我在在线教程中被告知要做的,尽管我觉得这就是问题所在。然后在 viewDidLoad 中输入以下几行:

self.tableView.estimatedRowHeight = 56
self.tableView.rowHeight = UITableViewAutomaticDimension

观看 WWDC 之后,似乎这几乎就是我所需要的关于单元格的全部内容,因此我进入界面生成器并将标签的“行”属性设置为 0,再次按照视频。它会按照我的预期调整所有单元格的大小,尽管它总是使它们太小一行,以至于全文不适合。下面是它的截图。如果您更容易给我一些建议,请询问您是否需要更多信息或照片。我意识到这对我来说可能是一个愚蠢的错误,但是因为 iOS 8 太新了,所以很少有地方可以看。非常感谢

【问题讨论】:

  • 我相信他们在 WWDC 上说过 estimatedRowHeight 存在错误。我不确定这是否已经解决了。
  • 他们确实做到了,但是他们通过使行数等于 0 给出了一个假设的解决方法。这可能是解决方法不再有效,我可能只需要等到 Xcode 6发布
  • 我有同样的问题,我使用的是 Xcode 6.3

标签: ios objective-c xcode uitableview swift


【解决方案1】:

我遇到了同样的问题。我必须完成所有 3 条建议才能让它发挥作用:

将标签上的行数设置为 0。

在cellForRowAtIndexPath: 中,将单元格标签的文本设置为空字符串,然后再分配所需的字符串。

在viewDidAppear: 中调用[tableView reloadData]。

我确实尝试过单独执行它们,但它不起作用。

但是在那之后我遇到了一个小问题...在表格重新加载之前可以查看文本的原始布局,并且在调整文本时会导致看起来很奇怪的文本“闪烁”。所以我创建了一个布尔并将单元格标签设置为隐藏。当viewWillAppear: 被调用时,我将该布尔值设置为真,在cellForRowAtIndexPath: 中,如果布尔值为真,我将取消隐藏标签。

无论如何,希望他们能解决这个问题,因为这是一个很棒的功能。

【讨论】:

    【解决方案2】:

    我还遇到了自动调整大小的格式问题,尤其是 UILabel 对象。最终对我有用的是修改 cellForRowAtIndexPath: 并首先将 UILabel 的文本分配给一个空字符串,然后再分配实际的字符串值,如下所示:

    cell.myLabel.text = @"";
    cell.myLabel.text = @"Here is the label's actual string value";
    

    我感觉 Apple 在自动调整大小方面仍有一些问题需要解决。

    【讨论】:

    • 感谢您的回答。我无法对其进行测试,但任何帮助都很棒。我同意,它确实似乎确实比我预期的要多得多。
    • 让我知道你的测试进展如何。我看到的症状似乎与您的有所不同,在我将 15 单元格列表滚动到顶部和底部几次后,单元格最终正确显示。但是一旦我做了空字符串技巧,它从一开始就正确显示。顺便说一句,我假设您还在 viewDidAppear: 回调中调用了 [self.tableView reloadData]?
    • 我会的,是的,我是
    【解决方案3】:

    我遇到了同样的问题;

    首先,确保内容拥抱优先级高于其他元素。 二、在viewDidLoad()中调用tableView.reloadData()。

    override func viewDidAppear(animated: Bool) {
         super.viewDidAppear(animated)
         tableView.reloadData()
    }
    

    最后,定义UITableViewDataSource 方法来使高度动态化:

    override func tableView(tableView: UITableView, estimatedHeightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
        return tableView.rowHeight
    }
    
    override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
        return UITableViewAutomaticDimension
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-24
      • 1970-01-01
      • 2019-09-29
      相关资源
      最近更新 更多