收藏ios

论坛项目Xcode 9/iOS 11 适配

2017-09-25  本文已影响409人  启发禅悟

上个礼拜,用Xcode8.3.3上传APP到 iTunes connect的时候突然产生一个错误:

No accounts with iTunes Connect access
iTunes Connect access for "Team-Name" is required. Add an account in the Accounts preference plane.

网上的帖子讨论,一致任务这是苹果的bug,所以一直希望苹果修复。不过等了一个多礼拜,都没有看到效果,而另外又有帖子说,升级Xcode 9可以解决这个问题,所以打算升级到Xcode9和iOS 11。

升级之后,确实可以上传到iTunes connect了。可以看到上传的流程有所改变,这可能就是Xcode8.3.3出错的原因吧。

那么接下来就开始折腾Xcode 9/iOS 11的适配吧。

主要是论坛项目,编译运行之后,就发现,点击Tabbar没反应了。Tabbar我是自定义过的,弃用了系统的TabbarItem,而是在Tabbar的位置上添加了5个UIButton,通过这5个Button来触发切换Controller。
研究后发现
Xcode 9和之前版本的差异,是self.tabbar.subviews出现了差异。Xcode 9之前,self.tabbar.subviews返回了系统的TabbarItem对应的UITabbarButton。
而Xcode9中,self.tabbar.subviews并不返回系统的TabbarItem对应的UITabbarButton。

我在自定义Tabbar的代码中,调用了如下代码,相当于把系统的Button给删除了。

    for (UIView* obj in self.tabBar.subviews) {
        if (obj != 自定义的tabbar sub view) {
            [obj removeFromSuperview];
        }
    }

而Xcode9的变动,导致系统的Button并没有删除,所以点击时直接调用了系统的按钮,而忽略了自定义的按钮及其事件。

修改,添加如下代码,让系统的UIBarButtonItem 失效。

    for (UIBarButtonItem * buttonItem in self.tabBar.items) {
        [buttonItem setEnabled:NO];
    }

今天又发现一个问题,向Toolbar上添加Button,但点击Button并不会触发Button对应的事件。最后的修改方案在这里:
https://stackoverflow.com/questions/46107640/ios11-uitoolbar-contentview

上一篇下一篇

猜你喜欢

热点阅读