Swift 包中的 XIB 文件 - 忽略约束

Posted

技术标签:

【中文标题】Swift 包中的 XIB 文件 - 忽略约束【英文标题】:XIB File in Swift Package - Constraints ignored 【发布时间】:2021-02-15 09:42:22 【问题描述】:

我将一些代码重构为它自己的 Swift 包。其中一部分是一个表格视图单元格为 .xib 文件,我将其放入 Resources 文件夹中。

现在出现了两个问题,在我将所有内容重构为自己的 Swift 包之前,这些问题都不存在:

A) 单元格中标签的约束被简单地忽略,文本位于单元格的顶部,而它应该在中间:

在模拟器中看起来像这样:

B) 出现的另一个问题是在该单元格的类中,以下代码会引发错误:

    @IBOutlet weak var resultTextLabel: UILabel! // this is the label
    override func awakeFromNib() 
        super.awakeFromNib()
        resultTextLabel.adjustsFontSizeToFitWidth = true // this line leads to the error
    

'NSUnknownKeyException', reason: '[ setValue:forUndefinedKey:]: 这个类不符合 key resultTextLabel 的键值编码。'

对 Swift 包的简单重构不应该破坏这样的事情。

问题:这里发生了什么?如何确保约束再次起作用?为什么我不能再调整awakeFromNib里面的textlabel字体大小选项了?

【问题讨论】:

您的自定义单元格被认为是UITableViewCell,而不是YourCustomTableViewCell 检查“继承模块”的状态可能在您设置类的InterfaceBuilder 中:***.com/a/54556194/1801544? @Larme 单元格连接到一个自定义类,即ResultCell: UITableViewCell。应该没问题。 当错误为NSUnknownKeyException', reason: '[<UITableViewCell 0x156f06570> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key resultTextLabel.'时,不是单元格不被视为ResultCell。所以我猜它没有加载正确的xib,或者不理解它的类。您能否将背景颜色设置为橙色,删除崩溃线,然后查看您的应用中的背景是否为橙色? @Larme 当我取消选中“从目标继承模块”并在“模块”下选择 Swift 包的名称时,它不会引发任何错误,但 awakeFromNib 内的 resultTextLabel 会交替打印nilOptional(UILabel...)。所以我必须 if resultTextLabel != nil 为标签设置背景颜色,这确实有效。 你是否从主包更新到包的任何包? 【参考方案1】:

这很可能不是您的错误。 Apple bugreporter 来救援。

在您自己的框架中从 xibs 加载单元格可以正常工作: 奇怪的是,包裹会给工作带来麻烦。

【讨论】:

以上是关于Swift 包中的 XIB 文件 - 忽略约束的主要内容,如果未能解决你的问题,请参考以下文章

在 Swift 中以编程方式设置 XIB 文件的约束

忽略 R.Swift 中的 segue 资源

Xcode 项目的 Git 忽略文件正在忽略 .swift 文件

如何在 Swift 中使用宽度约束将 Xib 加载到 CollectionView?

swift项目初始化并添加忽略文件Swift.ignore

UIButton 动画忽略 Swift 中的目标选择器