好久不见-IOS

公司混不下去。。没开让我转别的。。社畜很感激。

干到一半。老项目又要改,searchDisplayController ios13闪退。

嗯。瞄一眼。苹果估计是不乐意写兼容代码或者想减少下自己的体积。。所以么。。直接报错。

那么就改喽,改成UISearchController.记录下遇到的坑点。免得以后再遇到不知所措,被水淹没。

1.searchBar的问题。

searchDisplayController是传入searchBar的。。UISearchController是提供searchBar的。。2者不可兼得。。对于项目里自定义searchBar多的比较麻烦,而且我们的项目headerView都是自定义的。searchBar在headerView里。。

解决方法么。。继承UISearchController。自己写一个。然后重写searchBar方法。把自定义searchBar的实例返回回去。。

-(UISearchBar *)searchBar{

    return self.customSearchBar;

}

-(UISearchBar *)customSearchBar{

    if (_customSearchBar) {

        return _customSearchBar;

    }else{

        if(customCls) {

            _customSearchBar=[customCls new];

        }

        if (!_customSearchBar) {

            _customSearchBar=[UISearchBarnew];

        }

        return _customSearchBar;

    }

}

类似于这样。。

要是每个页面还有不一样的。只能去外面自定义了。。然后包含自定义searchBar的只能被动接受传入的searchBar了(怪以前偷懒,searchBar直接在自定义view里new的。。)。

第二坑。激活的时候seachBar位置各种不对。。鬼知道苹果怎么算得。反正就是激活的时候你的searchBar会从原始图中被苹果移动到searchController里。因为好像就是present出来的。。然后去掉了再帮你移动回去。

所以我暂时就只有硬编码解决了

-(void)viewDidLayoutSubviews{

    [super viewDidLayoutSubviews];

    //修改searchbar偏移问题

    //奇葩的偏移修复。硬编码

    if(self.view.subviews.count==2&&self.isActive) {

        UIView*container=nil;

        UIView*another=nil;

        for(UIView*subViewinself.view.subviews) {

            if ([NSStringFromClass(subView.class) containsString:@"SearchBar"]) {

                container=subView;

            }else{

                another=subView;

            }

        }

        if(container.top!=CGRectGetMaxY([UIApplicationsharedApplication].statusBarFrame)) {

            container.top=CGRectGetMaxY([UIApplicationsharedApplication].statusBarFrame);

            self.searchBar.top=container.top;

            another.top=container.bottom;

            another.height=self.view.height-another.top;

        }

    }

}

这代码到ios13.2都是好的。

3.黑屏。

因为我们是tab+navi+vc。这样的UI架构。然后search激活的时候要求不隐藏底部tabbar。就有被点击移动到别的tab的可能性。

然后发现点过去,,回来。。背景黑了。vc也没释放啊。。好了又是present的坑。设置跳转控制器为包含searchBar的VC就行。

        vc.definesPresentationContext=YES;

哎。。ios行情真的不好啊。

你可能感兴趣的:(好久不见-IOS)