使用hidesBottomBarWhenPushed
问题
问题描述:
从ViewController2
push到ViewController3
,ViewController2
设置 hidesBottomBarWhenPushed
属性,实现tabbar被隐藏。
TestViewControllerTwo *two = [[TestViewControllerTwo alloc]init];
two.hidesBottomBarWhenPushed = true;
[self.navigationController pushViewController:two animated:true];
在使用ViewController2
界面的时候由于登录被签退原因,需要退出界面,并切换选中的tabbarItem
,跳转界面至ViewController1
,会发现tabbar
“不会在显示回来”。
[self.navigationController popViewControllerAnimated:true];
[self.navigationController.tabBarController setSelectedIndex:0];
解决过程
首先在ViewController1
及ViewController3
打印tabbar的hidden
属性,值等于false
,因此无法使用hidden
属性控制tabbar显示。
猜测由于[self.navigationController popViewControllerAnimated:true];
动画返回界面,并且直接切换控制器界面,导致tabbar没有及时显示,将其改为[self.navigationController popViewControllerAnimated:false];
,问题解决。
问题修复
[self.navigationController popViewControllerAnimated:false];
[self.navigationController.tabBarController setSelectedIndex:0];
静态库冲突问题
问题描述:
开发中接入三方静态库文件实现功能,打包编译后发现与原有静态库内置文件名称冲突。
解决过程
查找两个静态库的来源为同一家公司,查阅有关静态库文件冲突资料,解决方法来源于有关.a(静态库)冲突问题
。
问题修复
备份源文件,把这两个.a文件
“中的一个”.a文件
生成对应架构的.a文件
,然后把这个.a文件
解压缩成.o文件
,删除里面看到的重复的.o文件
。然后再把这个对应.o文件
合成对应架构的.a文件
,再把多个架构的.a文件
合成一个.a文件
。最后把项目里的.a文件替换成自己处理过的.a文件。测试通过,编译正常运行。
注:方法仅限于三方静态库来源一致,一定要备份源文件。
附流程:
假设.a文件名称为test.a,将其放置一个单独的文件夹“Test”中
终端
$ cd "Test文件夹路径"
$ lipo -info test.a //可以看到armv7/arm64等字眼。就说明这个test.a包含了几种架构包。
//根据里面含有几种架构包就执行相应命令
//例:
$ lipo test.a -thin armv7 -output test_armv7.a
$ lipo test.a -thin i386 -output test_i386.a
//在Test文件夹得到libx-armv7.a 等等
//创建一个文件夹用于解压架构包文件
$ mkdir armv7
$ cd armv7
// 解压上一级目录下的armv7架构包文件
$ ar -x ../libx-armv7.a
//在armv7文件夹中找到对应的文件删除后生成新的armv7.a文件
$ libtool -static -o ../test_newarmv7.a *.o //【.a 和 * 号之间有一个空格】
// 重复生成其他对应架构包 创建文件夹 解压 删除冲突文件 生成新的静态库包
//合并所有新的架构包
$ lipo -create test_newarmv7.a test_newi386.a -output test.a
网友评论