使用 Swift 3 Xcode 8 加载时缺少自定义 XIB

Posted

技术标签:

【中文标题】使用 Swift 3 Xcode 8 加载时缺少自定义 XIB【英文标题】:Custom XIB missing when loading with Swift 3 Xcode 8 【发布时间】:2016-09-20 23:57:02 【问题描述】:

我正在使用带有自定义 XIB 的情节提要,在升级到 swift 2 和 xcode 7 之前一切正常。升级后可以将情节提要转换为 xcode 8。我的视图控制器显示视图,但缺少我的自定义 XIB .查看情节提要文件,使用自定义 XIB 转换情节提要似乎存在错误。其他人有这个问题吗?

required public init(coder aDecoder: NSCoder) 
    super.init(coder: aDecoder)!
    let bundle = Bundle(for: type(of: self))
    let nib = UINib(nibName: self.dynamicTypeName, bundle: bundle)
    let nibView = nib.instantiate(withOwner: self, options: nil).first as! UIView
    self.mainView = nibView
    self.mainView.frame = bounds
    self.mainView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
    mainView.translatesAutoresizingMaskIntoConstraints = true
    self.addSubview(mainView)

【问题讨论】:

【参考方案1】:

swift 3 的布局过程出了点问题,因为在升级之前

调用 self.mainView.frame = bounds,会给你正确的边界,但现在使用 swift 3 它总是(0、0、1000、1000),所以我必须在 layoutSubviews 中设置框架以获得正确的边界.

open override func layoutSubviews() 
    self.mainView.frame = bounds

【讨论】:

我也遇到了同样的问题,你找到解决办法了吗。 是的,尝试在 layoutSubviews 中设置您的自定义 xib 框架 不知道为什么它没有自动取帧,尽管提供的房间仍然是全屏的(比如 mainscreen.rect)

以上是关于使用 Swift 3 Xcode 8 加载时缺少自定义 XIB的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 swift 3 xcode 8 在核心数据中预加载数据库

在 Xcode 8.0 Swift 3.0 上检测手势

自定义幻灯片 Segue - Xcode 8.0 Swift 3.0

Xcode8/Swift 3 更新后缺少 Firebase 标头警告

无法使用 Xcode 7.3.1 在我的 Swift 2 项目中检查带有“po”的变量 - 加载辅助函数时出错

Swift 3.0 xCode 8 迁移吊舱