【问题标题】:IBDesignable never finishes updating UITableViewCell in storyboardIBDesignable 永远不会完成更新故事板中的 UITableViewCell
【发布时间】:2015-08-26 01:37:38
【问题描述】:

这是与this 类似的问题,但不完全相同。

我创建了一个 UITableViewCell 的子类,它引用了一个自定义笔尖并将其标记为 @IBDesignable。在代码和 .xib 文件中所做的更改在模拟器和设备上正确显示,但在情节提要中不显示。

import UIKit

@IBDesignable class TextFieldTableViewCell: UITableViewCell {

    var view: UIView!

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)

        setup()
    }

    override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
        super.init(style: style, reuseIdentifier: reuseIdentifier)

        setup()
    }

    func setup() {
        view = loadViewFromNib()
        view.frame = bounds
        view.autoresizingMask = [UIViewAutoresizing.FlexibleWidth, UIViewAutoresizing.FlexibleHeight]
        contentView.addSubview(view)
    }

    func loadViewFromNib() -> UIView {

        let bundle = NSBundle(forClass: self.dynamicType)
        let nib = UINib(nibName: "TextFieldTableView", bundle: bundle)
        let view = nib.instantiateWithOwner(self, options: nil)[0] as! UIView

        return view
    }
}

情节提要显示永久的“Designables Updating”。

将问题分解为一个不太复杂的测试,即仅对 UITableViewCell 进行子类化并将其标记为 @IBDesignable 会导致相同的永久“Designables Updating”。

import UIKit

@IBDesignable class TextFieldTableViewCell: UITableViewCell {

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    }

    override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
        super.init(style: style, reuseIdentifier: reuseIdentifier)
    }

}

有没有人成功创建了@IBDesignable UITableViewCell 子类?这发生在 Xcode 7 beta 6 和 beta 5 中。

【问题讨论】:

  • 我面临同样的问题。但是当我把 tableViewCell 放在一个普通的 ViewController 中时,我可以做 IBDesignable。所以,我认为这是一个 XCode 错误,无法在 TableView 中设计单元格
  • Apple 已经回复了我提交的错误报告,这确实是一个错误。
  • 谢谢,帮了大忙
  • 我正在使用 Xcode 9 GM。它没有这个问题。

标签: ios xcode swift storyboard ibdesignable


【解决方案1】:

此问题已从 Xcode 9 开始解决。

我已经向 Apple 报告了这个问题,并且至少知道这是一个已知的错误。它目前是问题 ID 17973876 下的未解决问题。

编辑:截至 2016 年 12 月 7 日,此错误仍标记为打开。

【讨论】:

  • 目前在 XCode9 上发生在我身上?我是否也应该向他们报告问题?
  • 我刚刚在我的自定义 UIView 中放置了一个 UICollectionView,它也没有在 Storyboard 中呈现。我只是很困惑是我的问题还是它的错误。!
【解决方案2】:

我遇到了类似的问题。这个帖子帮助我理解了这个问题:Is there a way for Interface Builder to render IBDesignable views which don't override drawRect:

我通过添加让它工作

override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
        super.init(style: style, reuseIdentifier: reuseIdentifier)
        layoutSubviews()
    }

据我在阅读上述堆栈链接后了解,IBDesignable 不是从 nib 或编码器而是从带有框架的 init 加载故事板中的 nib。不太确定,但我认为 init with style 正在做类似的事情。

【讨论】:

  • 添加上面建议的代码没有任何区别。
  • 您是否覆盖了 layoutSubviews() 方法并调用了 super?我有一些我需要的自定义绘图代码,因此实现了该方法。我发现使用 xib 真的很繁琐,但这可能会有所作为。 >覆盖 func layoutSubviews() { super.layoutSubviews() }
  • 我在 XCode 7.2 上遇到了同样的问题,但这并没有帮助。我也看不出如何实现layoutSubviews 并且只调用超类版本会有所帮助 - 当layoutSubviews 被调用时,如果它没有被覆盖,它只会自动调用超类版本。
【解决方案3】:

似乎只有当单元格位于情节提要内时才会发生“更新”错误。当您为单元格创建特殊的 .xib 文件时,一切正常。

希望他们会尽快修复它。

【讨论】:

    猜你喜欢
    • 2020-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多