Xcode 11 Xib _UITextLayoutView 崩溃

崩溃信息如下:

*** Terminating app due to uncaught exception 
'NSInvalidUnarchiveOperationException', 
reason: 'Could not instantiate class named _UITextLayoutView because no class named _UITextLayoutView was found; 
the class needs to be defined in source code or linked in from a library (ensure the class is part of the correct target)'

解决方案 一

xib的部分视图改用硬核手写,以避坑。
解决方案 二

下载其他版本Xcode 传送门
解决方案 三

OC 黑魔法 Runtime。

    创建 文件 UITextViewWorkaround

    UITextViewWorkaround.h

    #import <Foundation/Foundation.h>
     
    @interface UITextViewWorkaround : NSObject
    + (void)executeWorkaround; 
    @end
     

    UITextViewWorkaround.m

    #import "UITextViewWorkaround.h"
    #import  <objc/runtime.h>
     
     
     
    @implementation UITextViewWorkaround
     
    + (void)executeWorkaround {
        if (@available(iOS 13.2, *)) {
     
        }
        else {
            const char *className = "_UITextLayoutView";
            Class cls = objc_getClass(className);
            if (cls == nil) {
                cls = objc_allocateClassPair([UIView class], className, 0);
                objc_registerClassPair(cls);
    #if DEBUG
                printf("added %s dynamically\n", className);
    #endif
            }
        }
    }
     
    @end

    使用该静态方法

    #import "UITextViewWorkaround.h"
     
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
        // Override point for customization after application launch.
     
        [UITextViewWorkaround executeWorkaround];
        return yes;
    }

    swift 版本请客观收下:

    import UIKit
     
    @objc
    class UITextViewWorkaround : NSObject {
     
        static func executeWorkaround() {
            if #available(iOS 13.2, *) {
            } else {
                let className = "_UITextLayoutView"
                let theClass = objc_getClass(className)
                if theClass == nil {
                    let classPair: AnyClass? = objc_allocateClassPair(UIView.self, className, 0)
                    objc_registerClassPair(classPair!)
                }
            }
        }
     
    }

发布了49 篇原创文章 · 获赞 7 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/qq_29680975/article/details/103579986