Xcode 7 beta 5、Swift 2:UITableViewCell 的子视图在运行时未添加到 contentView

Posted

技术标签:

【中文标题】Xcode 7 beta 5、Swift 2:UITableViewCell 的子视图在运行时未添加到 contentView【英文标题】:Xcode 7 beta 5, Swift 2: UITableViewCell's subviews are not added to the contentView at runtime 【发布时间】:2015-08-15 17:07:51 【问题描述】:

使用 Xcode 7 beta 5 和 Swift 2 时会出现以下现象:

使用在情节提要中创建的自定义 UICollectionViewCell 时,单元格的子视图不会添加到单元格的 contentView。因此,单元格在运行时保持空白。

如果我为单元格创建一个自定义单元格类,然后以编程方式将子视图添加到 contentView 并设置它们的frame,则单元格的内容将显示:

class Cell : UITableViewCell 

    @IBOutlet weak var label: UILabel!

    override func awakeFromNib() 
        super.awakeFromNib()

        NSLog("subiews.count=%d", contentView.subviews.count) // prints "0"

        contentView.subviews.count
        contentView.addSubview(label)

        label.frame = CGRect(x: 0, y: 0, width: 200, height: 21)
    

同样,如果不手动添加标签(已添加到情节提要中!)并设置其框架,它在运行时将不可见!在情节提要中,标签内容视图的子视图。在运行时它不是

我无法在带有 Swift 1.2 的最新 Xcode 6 中观察到这种行为。

有人可以证实这种愚蠢的行为吗?也许提供更简单的解决方法?

编辑: 幸运的是,在以编程方式将这些视图添加到contentView 后,将应用对单元格子视图的视图约束。因此,至少不需要手动设置它们的框架。

【问题讨论】:

我看到你在这里忽略了自动布局...... @TheCodingArt 自动布局只是不需要设置视图的框架。但是,您仍然需要以编程方式将视图添加到 contentView 如果不在代码中添加约束,这不会像你想象的那样结束。仅使用帧编程,自动布局不能很好地发挥作用。我建议您查看自动布局引擎的工作原理并在运行时检查您的视图层次结构 是否使用自动布局与此问题无关。请再次阅读我的问题,如果我需要澄清,请告诉我。 我有一种怀疑的感觉,即您不了解布局周期的工作原理,这导致了您所看到的。使用基本的 xcode 视图检查器对调试视图层次结构进行简单检查应该可以揭示发生了什么 【参考方案1】:

这里有一个类似的问题UITableView Empty with ios 9 beta 5 update

我的回答https://***.com/a/32052154/2674336

我不能说这是否是一个通用的解决方案,但在完全相同的情况下(更新到 XCode 7 beta 5 后,tablviewcell 内容在运行时为空)这为我解决了这个问题:

我必须检查内容视图中的每个项目(包括所有约束)并在属性检查器中勾选“已安装”复选框。最初只检查 wR hR。

【讨论】:

有没有办法以编程方式做到这一点?还有“已安装”的实际作用是什么? 据我了解,这允许您选择适用于您查看/约束的外形尺寸。 RxR 是 iPad 全面屏,第一个是“适用于任何外形尺寸”。我的应用程序仅适用于 iPad,因此仅 RxR 应该(并且直到 beta 5)都可以。至于以编程方式修复,您可能可以对代码中有出口的项目执行此操作,但尚未尝试过。

以上是关于Xcode 7 beta 5、Swift 2:UITableViewCell 的子视图在运行时未添加到 contentView的主要内容,如果未能解决你的问题,请参考以下文章

Xcode 7 beta 5、Swift 2:UITableViewCell 的子视图在运行时未添加到 contentView

Swift 2/Xcode 7 beta - 多个位掩码产生错误

无法使用 Swift 2 在 Xcode 7 beta 中导入 FBSDK

Root.plist 中的项目不显示在设置中。 iOS9/Xcode7-beta5

在 Swift 2 Xcode 7 Beta 4 中设置基于位置的提醒时出错

XCTest Xcode 7 beta 3 swift 2 从情节提要问题启动视图控制器