美文网首页
iOS 关于 appearance 的使用

iOS 关于 appearance 的使用

作者: 幸运者_Lucky | 来源:发表于2019-02-21 11:18 被阅读2次

    最近用自己的 APP 打字的时候经常发现,拖动选字栏的时候,键盘自动回收了,搜了好久都没发现大家有这个问题,首先想到可以滑动的应该都是UIScrollView的子类,难道是UIScrollView添加分类或者Method Swizzling影响到了键盘?
    然后我开始逐行查看分类的代码,发现没有地方影响。
    隔了一天,我从另一个方向开始查找,能产生拖动回收的应该是scrollView.keyboardDismissMode = .onDrag, 所以我全局搜了一次,发现有这么一段代码

    private func setupAppearance() {
            // UIScrollView
            let scrollView = UIScrollView.appearance()
            scrollView.keyboardDismissMode = .onDrag
            scrollView.backgroundColor = .clear
    }
    

    突然好像明白了,使用 appearance 设置了键盘中的 scrollView.keyboardDismissMode = .onDrag,那么现在只要找到键盘所有UIScrollView 的子类并把他们的拖动回收键盘关掉就好了,于是先看了键盘的层级

    键盘.jpg
    发现选字的地方是一个collectionView,于是找到了它的父视图,并添加了以下的代码
        private func setupAppearance() {
            // UIScrollView
            let scrollView = UIScrollView.appearance()
            scrollView.keyboardDismissMode = .onDrag
            scrollView.backgroundColor = .clear
            
            if let type = NSClassFromString("UIKeyboardCandidateBar") as? UIAppearanceContainer.Type {
                let keyboardCandidateBar = UIScrollView.appearance(whenContainedInInstancesOf: [type])
                keyboardCandidateBar.keyboardDismissMode = .none
            }
        }
    

    试了以下,没想到成了。
    虽然投机取巧的改了这个问题,但问题反思后发现尽量不要用 appearance,除非是项目特别统一的地方,但也可以通过继承来实现控件标准化,而且通过这种方式修改默认值,很难发现,后期也很容易忘记,很难维护。

    相关文章

      网友评论

          本文标题:iOS 关于 appearance 的使用

          本文链接:https://www.haomeiwen.com/subject/wsxryqtx.html