UITextView中的断言失败 _firstBaselineOffsetFromTop

21

我正在学习如何使用Xcode中的视图调试器并使用Debug > View Debugging > Capture View Hierarchy捕获视图层次结构。但是当我在我的应用程序中尝试时,出现了以下错误:

Assertion failure in -[UITextView _firstBaselineOffsetFromTop], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit_Sim/UIKit-3512.60.7/UITextView.m:1683

我可以在以下简单项目中复现此问题:

import UIKit
class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let myTextView = UITextView()
        myTextView.frame = CGRect(x: 50, y: 50, width: 200, height: 100)
        myTextView.text = "This is a test."
        view.addSubview(myTextView)

    }
}

我在这里看到可能是由于没有使用自动布局引起的。这真的是一个必须等待修复的错误吗?有没有Swift的解决方法?

更新

建议的重复问题看起来像是我遇到的同样问题。然而,与那个问题不同的是,我正在寻求Swift的解决方法。那个问题的“答案”只是一个链接(就是我上面已经有的链接)。我要投票关闭其他方式。


2
可能是重复的问题:无法使用调试视图层次结构 - werediver
1个回答

46

注意 仅在 DEBUG 构建中执行此操作。

解决此问题的一种方法是将以下类别保留在您的项目中。这对我起了作用。

@interface UITextView(MYTextView)

@end

@implementation UITextView (MYTextView)
- (void)_firstBaselineOffsetFromTop {

}

- (void)_baselineOffsetFromBottom {

}

@end

为了 Swift

extension UITextView {
    func _firstBaselineOffsetFromTop() {
    }
    func _baselineOffsetFromBottom() {
    }
}

1
啊,我现在明白了。所以这是覆盖了导致断言失败的方法。我想,如果那些方法有其他重要的功能,你会失去那些功能,但当需要捕获视图层次结构时,这是一个非常有用的解决方法。然后可以稍后将扩展(或类别)注释掉。 (我使用问题中的示例项目测试了Swift代码,并确认它确实有效。) - Suragch
3
只有在调试模式下才能启用,将以下代码添加到.pch文件中:#ifdef DEBUG #import "UITextView+MYTextView.h" #endif - jpredham
感谢这个巧妙的解决方法 && 苹果做得好 >=: - Amr Lotfy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接