Linker Error、MRC与ARC、导航条背景

1、Apple Mach-O Linker Error

今天写重新打开Xcode,运行项目,突然有21个Error,我以为是Xcode抽风了,所以点击菜单Product->Clean,以为清理一下就OK了,悲剧的是重新编译,还是21个Error,这时我就紧张了,再次Clean以后,看着Xcode编译的过程。大家肯定都知道“Compling 100 of 200 files”这个编译的提示进度条,我看编译时候一直没有报错,然后开始了链接Link的过程,然后就报错了,仔细看看错误,就是"Apple Mach-O Linker Error",就是说在链接的时候发生了错误,一般情况下这是因为引用第三方库时候没有导入相对应的框架framework,或者是因为没有自动添加某些.m文件到Complie File。

解决的方法:

点击工程文件->Build Phases->Complie Sources添加没有添加的.m文件,或者Build Phrases->Link Binary with Libraries,添加没有导入的框架framework。

今天我出现这样的错误其实不是因为以上这些原因,而是因为我的项目当中有C++代码以及一些复杂的框架和SDK,所以不能在模拟器上面运行,但是我开机时候忘了选择真机调试,导致了Linker Error。当然大家如果遇到这种Apple Mach-O Linker Error,要仔细看看原因,基本上改正的方法就是添加.m文件或者导入相关的Library。记住这个错误的原因,以后就不用在重复地寻找解决方法。

2、现在的项目是手动内存管理,所以在引入第三方资源库时候,很多资源库更新以后都开始使用arc进行编码,这样就导致两种代码风格不一致,有的时候可能开发者也没有注意到这些问题,反正用的时候也没有报错,就直接使用了;但是有的时候,因为arc编码中用到了新的属性修饰符,例如weak,这时候在手动管理内存的代码中就不能编译通过,报错的内容就是:@synthesize of ‘weak‘ property is only allowed in ARC or GC mode,这就是引入的arc代码在项目中的冲突,有一种解决办法就是把资源代码中的weak修饰符改为assign,但是这种方法毕竟是把别人写的代码给改了,有的时候往往会出现闪退、崩溃的问题。

比较好的解决办法就是项目配置文件->Build Phrases->Complie Files,找到出现问题的资源库文件(比如weak修饰符所在的文件),双击Complie Files中的该文件,在空白行中写入-fobjc-arc,这样就可以有效防止该冲突。反过来有的时候,在arc代码中引入手动管理内存的代码,我们在Complie Files中为新增的资源文件增加-fno-objc-arc,这样就避免了手动管理内存的代码在arc代码中的冲突。

3、修改导航栏NavigationBar为透明色

项目中有个需求就是要把导航栏设置为透明色,这样才能不遮挡整个背景图片,我们的UI设计需求就是导航栏部分也能看见背景图片。这个需求看起来简单,做起来难,不过还是在stackoverflow找到了答案。解决方案点此链接,主要代码就是

[self.navigationBar setBackgroundImage:[UIImage new]

forBarMetrics:UIBarMetricsDefault];

self.navigationBar.shadowImage = [UIImage new];

self.navigationBar.translucent = YES;//这一行不是关键性代码,甚至是错误代码,因为在iOS 6会造成一个bug

代码意思大家都能看懂,主要设置NavigationBar背景图片为空、透明translucent为YES。这种时候还有两个问题,第一就是Status Bar(就是现实时间、电源信号的状态栏)字体看不清了,这时候通过设置状态栏Status Bar的风格为默认的就可以,

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault];

第二个问题是导航栏的字体颜色现在也看不清,通过下面的代码可以修改,

NSDictionary *navbarTitleTextAttributes = [NSDictionary dictionaryWithObjectsAndKeys:

[UIColor blackColor],UITextAttributeTextColor,

[UIColor whiteColor], UITextAttributeTextShadowColor,

[NSValue valueWithUIOffset:UIOffsetMake(-1, 0)],UITextAttributeTextShadowOffset, nil];

[[UINavigationBar appearance] setTitleTextAttributes:navbarTitleTextAttributes];

原文在stackoverflow,答案这样描述了上述代码的作用:通过UINavigationBar的setTitleTextAttributes,你可以设置字体、颜色、偏移坐标(offset)和阴影的颜色,通过调用UINavigationBar的类方法setTitleTextAttributes,就是默认设置了你整个应用程序中的导航栏的显示效果。

时间: 2024-10-13 09:32:02

Linker Error、MRC与ARC、导航条背景的相关文章

导航条背景

1.导航条背景颜色修改: self.navigationController.navigationBar.barTintColor=[UIColor redColor]; 2.判断点击的是哪个类 3.判断导航栏下面的试图坐标是否以导航栏的左下角为原点 self.automaticallyAdjustsScrollViewInsets = NO; 4.是否在试图上面添加滚动条 _tabView.showsVerticalScrollIndicator = YES; 5.页面跳转 [self.nav

导航条背景设置

var curr_url = window.location.href; $('#saixuanshangpin a').each(function(i,n){ if(n == curr_url){ $(this).addClass('gonggong'); } }); */

设置导航条标题及背景图片

#import "XMGNavigationViewController.h" @interface XMGNavigationViewController () @end @implementation XMGNavigationViewController + (void)load { UINavigationBar *navBar = [UINavigationBar appearanceWhenContainedIn:self, nil]; // 只要是通过模型设置,都是通过富

导航条的自定义:背景颜色设置,按钮标题图片设置,图片坐标修改

一.修改系统原生导航条 修改导航条背景颜色 self.navigationController.navigationBar.barTintColor = [UIColor colorWithHexString:@"#2295f2"]; 自定义导航条按钮 self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc]initWithImage:[UIImage imageNamed:@"btn-menu-h&q

【转】一个DIV+CSS代码布局的简单导航条

原文地址:http://www.divcss5.com/shili/s731.shtml 简单的DIV CSS代码布局实现导航条 一个蓝色主题的导航条布局案例,本CSS小实例,采用DIV CSS实现.同时不用图片做背景,直接使用背景色实现,鼠标经过悬停对应栏目名称是对应背景蓝色变深. 导航条部分效果截图 一般导航条采用ul li列表布局,这里也不例外DIVCSS5实例也采用列表标签ul li+ CSS布局. 一.布局思维思考   -   TOP 在实际DIV+CSS布局项目中,一般不会只使用一次

【iOS开发-22】navigationBar导航条和navigationItem设置:基本搞定导航条上的文字和按钮以及各种跳转

(1)navigationBar导航条可以看做是self.navigationController导航控制器的一个属性,可以直接用点来表示self.navigationController.navigationBar,当然navigationBar自己还有很多属性,比如样式barStyle.背景backgroundColor.frame属性(可以获取宽高这些信息),还可以用setBackgroundImage方法设置背景图片,当然图片多了可以使用clipsToBounds剪裁. (2)但,nav

iOS 导航条的基本用法

//导航条标题 self.navigationItem.title = @"title"; //导航条返回时文字的设置 self.navigationController.navigationBar.topItem.title= @""; //导航条返回时箭头颜色的设置 self.navigationController.navigationBar.tintColor = [UIColor redColor]; //导航条的颜色 self.navigationCon

Asp.net 导航条【1】

PHP比较成熟的开放的源代码比较多,比方说PrestaShop,比方说Discuz!...... 虽然语言不同,但基本原理是一样的,有时间的话读一读,对学习ASP.NET应该是非常有好处的(唉,什么时候ASP.NET也能有这么多成熟的,流行的开放源代码呢?). 这个导航条是动态的,主要是要用后台代码判断点击选择的是哪个菜单项,然后修改,进而设置当前选择菜单项的样式. [效果] [素材] 素材1:导航条背景 素材2:菜单项链接.鼠标悬浮及当前选项样式背景 [前台界面] [html] view pl

导航条颜色

//导航条背景颜色 self.navigationController.navigationBar.barTintColor = [UIColor blueColor]; //导航条上面控件颜色 self.navigationController.navigationBar.tintColor = [UIColor whiteColor]; //设置系统导航条的title字体大小和颜色 [self.navigationController.navigationBar setTitleTextAt