iOS开发基础之设置状态栏和二维码的unspported type found 问题
最近遇到设置状态栏和二维码AVCaptureMetadataOutput setMetadataObjectTypes: unspported type found的错误问题,所以我在这里进行总结一下,方便大家以后的使用;
设置状态栏:
(个人方法:是在AppDelegate头文件中设置,自己的主题色)
[[UINavigationBar appearance] setBarTintColor:THEME_COLOR];
[[UINavigationBar appearance] setTintColor:[UIColor whiteColor]];
[[UINavigationBar appearance] setTitleTextAttributes:@{NSForegroundColorAttributeName: [UIColor whiteColor]}];
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
具体讲解:
状态栏的字体为黑色:UIStatusBarStyleDefault
状态栏的字体为白色:UIStatusBarStyleLightContent
一、在info.plist中,将View controller-based status bar appearance设为NO
状态栏字体的颜色只由下面的属性设定,默认为白色:
// default is UIStatusBarStyleDefault
[UIApplication sharedApplication].statusBarStyle
解决个别vc中状态栏字体颜色不同的办法
1、在info.plist中,将View controller-based status bar appearance设为NO.
2、在app delegate中:
[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;
3、在个别状态栏字体颜色不一样的vc中
-(void)viewWillAppear:(BOOL)animated{
[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleDefault;}
-(void)viewWillDisappear:(BOOL)animated{
[super viewWillDisappear:animated];
[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;}
二、在info.plist中,将View controller-based status bar appearance设为YES,或者没有设置。
View controller-based status bar appearance的默认值就是YES。
如果View controller-based status bar appearance为YES。
则[UIApplication sharedApplication].statusBarStyle 无效。
用下面的方法:
1、在vc中重写vc的preferredStatusBarStyle方法。
-(UIStatusBarStyle)preferredStatusBarStyle{
return UIStatusBarStyleDefault;}
2、在viewDidload中调用:[self setNeedsStatusBarAppearanceUpdate];
但是,当vc在nav中时,上面方法没用,vc中的preferredStatusBarStyle方法根本不用被调用。
原因是,[self setNeedsStatusBarAppearanceUpdate]发出后,
只会调用navigation controller中的preferredStatusBarStyle方法,
vc中的preferredStatusBarStyley方法跟本不会被调用。
解决办法有两个:
方法一:
设置navbar的barStyle 属性会影响status bar 的字体和背景色。如下。
//status bar的字体为白色
//导航栏的背景色是黑色。
self.navigationController.navigationBar.barStyle = UIBarStyleBlack;
//status bar的字体为黑色
//导航栏的背景色是白色,状态栏的背景色也是白色。
//self.navigationController.navigationBar.barStyle = UIBarStyleDefault;
方法二:
自定义一个nav bar的子类,在这个子类中重写preferredStatusBarStyle方法:
MyNav* nav = [[MyNav alloc] initWithRootViewController:vc];
self.window.rootViewController = nav;
@implementation MyNav
- (UIStatusBarStyle)preferredStatusBarStyle{
UIViewController* topVC = self.topViewController;
return [topVC preferredStatusBarStyle];}
二维码AVCaptureMetadataOutput setMetadataObjectTypes: unspported type found的错误问题:
我使用的是QR代码扫描,当你调用扫描时,会询问你打开相机的权限,如果你点击允许,那么下次点击时可以直接调用相机扫码,但是如果你点击的是不允许,然后再次点击时会Crash掉,这是因为output.availableMetadataObjectTypes被设置为空了,相当于把相机的权限关掉了,再次点击时,不进行判断相机的权限是无法调用的,否则就会Crash,所以要在调用二维码扫码之前进行权限判断,添加一下代码,记得添加#import <AVFoundation/AVFoundation.h>库:
//必须添加这个,否则如果用户选择不允许打开相机时,当再次调用相机,会崩溃
NSString *mediaType = AVMediaTypeVideo;
AVAuthorizationStatus authStatus = [AVCaptureDevice authorizationStatusForMediaType:mediaType];
if(authStatus == AVAuthorizationStatusRestricted || authStatus == AVAuthorizationStatusDenied){
UIAlertView *alert =[[UIAlertView alloc]initWithTitle:@"温馨提示" message:@"请先打开APP相机访问权限" delegate:nil cancelButtonTitle:@"确定" otherButtonTitles: nil];
[alert show];
return;
}
iOS开发基础之设置状态栏和二维码的unspported type found 问题的更多相关文章
- 有关iOS系统中调用相机设备实现二维码扫描功能的注意点(3/3)
今天我们接着聊聊iOS系统实现二维码扫描的其他注意点. 大家还记得前面我们用到的输出数据的类对象吗?AVCaptureMetadataOutput,就是它!如果我们需要实现目前主流APP扫描二维码的功 ...
- 网站开发进阶(十四)JS实现二维码生成
JS实现二维码生成 绪 项目开发原语:已然花费半天的时间,仍旧未能将二维码显示在订单中.但是可以在单个页面中显示二维码,结合到angularjs的控制器中就失效了,自己是真的找不到其中的原因了.费解! ...
- 用c#开发微信(2)扫描二维码,用户授权后获取用户基本信息 (源码下载)
本文将介绍基于Senparc.Weixin微信开发框架来实现网页授权来获取用户基本信息.先生成包含授权及回调url信息的二维码:用户用微信扫描之后,被要求授权以获取Ta的用户基本信息:用户授权后,通过 ...
- 解决Mac版微信小程序开发工具打开后无法显示二维码
问题描述: 正常情况下,打开微信小程序开发工具后,首页提示扫描二维码进行登陆,但是如果不显示二维码,当然无法登陆. 解决方案: 无法显示二维码肯定是程序运行哪里出错了,我们直接点击桌面图标是无法排查错 ...
- 【iOS开发-72】设置状态栏的两种方式、程序生命周期以及更好地理解几大类(对象)之间的关系
(1)设置状态栏的2种方式 --第一种方式就是我们在控制器中设置,系统默认就是交给视图控制器去管理的,这样不同视图控制器能够自己定义不同的状态栏例如以下: -(BOOL)prefersStatusBa ...
- 关于ios在H5页面长按识别二维码无效
环境 框架: vue 操作系统: ios 解决 如果你的vue-router用了mode:history: 把它去掉用默认的就OK了
- 安卓开发中使用ZXing生成解析二维码
编码示例 package com.wolf_pan.qrcodesample; import android.graphics.Bitmap; import android.graphics.Colo ...
- iOS开发-二维码扫描和应用跳转
iOS开发-二维码扫描和应用跳转 序言 前面我们已经调到过怎么制作二维码,在我们能够生成二维码之后,如何对二维码进行扫描呢? 在iOS7之前,大部分应用中使用的二维码扫描是第三方的扫描框架,例如Z ...
- Swift开发小技巧--扫描二维码,二维码的描边与锁定,设置扫描范围,二维码的生成(高清,无码,你懂得!)
二维码的扫描,二维码的锁定与描边,二维码的扫描范围,二维码的生成(高清,无码,你懂得!),识别相册中的二维码 扫描二维码用到的三个重要对象的关系,如图: 1.懒加载各种类 // MARK: - 懒加载 ...
随机推荐
- 典型分布式系统分析之MapReduce
在 <分布式学习最佳实践:从分布式系统的特征开始(附思维导图)>一文中,提到学习分布式系统的一个好方法是思考分布式系统要解决的问题,有哪些衡量标准,为了解决这些问题:提出了哪些理论.协议. ...
- sqli-lab 第一题 单引号 error based single quotes
一.第一次见面 1.初识 http://localhost/Less-1/ 提示输入id,因此访问http://localhost/Less-1/?id=1 可以继续测试id=2.3.4等的情况,会输 ...
- Hibernate 学习之Query查询(HQL查询)
package com.itcloud.test; import com.itcloud.pojo.Dept; import org.hibernate.Session; import org.hib ...
- 初学servlet之form表单
使用doget向页面写表单,使用dopost读取表单内容,包括了单选按钮,复选框,下拉列表等等的读取方法,form的action属性不写,默认表单会被提交给请求他时用的相同的URL package a ...
- shell编程-项目部署(二)
上节我们讲了项目部署的准备工作,现在具体讲下代码部署 首先梳理下思路,大致是这样: 获取代码 打包代码 传输代码 关闭应用 解压文件 放置文件(备份老文件,放置新的文件) 开启应用 最后检查下 OK, ...
- [HNOI 2014]道路堵塞
Description A国有N座城市,依次标为1到N.同时,在这N座城市间有M条单向道路,每条道路的长度是一个正整数.现在,A国 交通部指定了一条从城市1到城市N的路径,并且保证这条路径的长度是所有 ...
- hihoCoder 1596 : Beautiful Sequence
Description Consider a positive integer sequence a[1], ..., a[n] (n ≥ 3). If for every 2 ≤ i ≤ n-1, ...
- UVA1349:Optimal Bus Route Design
题意:给定一个有向带权图,找若干个环,使得每个点属于且仅属于一个环,要求使得环权值之和最小 题解:发现这题中每个点属于且仅属于一个环,这时候"仅"这种恰好的含义,让我们想到了匹配问 ...
- CSAPP-过程调用,数据存储,缓冲区溢出
程序编译: 1.预处理阶段: 1.文件包含:将#include扩展成文件正文 2.条件编译:根据#if和#ifdef将程序的某部分排除或者包含 3.宏展开:将出现宏引用的地方展开成相应的宏 2.编译阶 ...
- ●BOZJ 2127 happiness
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=2127 题解: 和 BZOJ 3984 建图类似(最小割模型).但是这个建图方法效率有点低.另 ...