求助,去了sb和刷了ios下拉刷新加状态栏栏之后的问题

手机签到经验翻倍!快来扫一扫!
被毁掉的IOS越狱,我们是否做错了什么?
45851浏览 / 165回复
如今提到越狱,我们的态度,和几年前似乎大不一样。几年前,“会越狱”是一项很帅气的技能,我们可以拿它来让自己的 iPhone 和别人不一样,可以耍酷,可以享受,也可以拿来把妹。而后来,当我们只需要装个助手就完成了越狱的全过程,当越来越多的人开始用越狱的 iPhone 肆无忌惮的下载原本应该付费的 App,当人们为了一点蝇头小利安装来路不明的插件,当我们的个人信息在自觉或不自觉中一次又一次被泄露的七七八八,舆论开始把矛头指向了“越狱”这件事儿,似乎这一切的过错的始作俑者,都是“越狱”。“越狱”真的如洪水猛兽一般需要我们敬而远之么?iOS 9 时代到来我们是否还需要越狱?那些在越狱圈里浸淫许久的“大神”们,又是怎么看待如今的越狱市场的呢?四个月前,发生了迄今为止最大的一起苹果帐号泄露事件。2015 年 8 月 25 日,乌云漏洞报告平台披露了一则令广大 iPhone 用户不安的消息,白帽子通过逆向分析某款抢红包插件时发现,有些开发团队将越狱用户的 iCloud 账号与明文密码记录并发往远程服务器,而受影响的 iCloud 账号已经超过了 22 万。一周后,Palo Alto Networks 的安全员 Claud Xiao 发布了一则长篇报道,对此次 iCloud 账号泄露事件以及盗号插件已经进行了一次详细的分析。而这则资讯也相继出现在了当天各大科技媒体的头条位置,成为了一起较大规模的用户数据泄露事件。本次恶意软件命被命名为“KeyRaider”,目标正是广大的 iOS 越狱用户。这些软件通过 Mobile Substrate 来注入系统,并通过拦截 iTunes 流量从而窃取苹果账号、密码和设备的 GUID,以此成功偷取了超过 225000 个有效的苹果账户和成千上万的证书、私人钥匙和购买收据,并上传至一个私人服务器。由于该服务器有着众多的漏洞,用户的信息也因此遭到泄露。▲有史以来因恶意软件所造成的最大 Apple 账号泄露事件通过解读这份报告,我们也发现,恶意软件基本来源于一个名为“mischa07”的个人私有源插件, 除了有提供“自动抢红包”这样功能的插件外,还有的就是可以让用户“免费”从 App Store 下载应用,或者是破解应用内购内容——然而,这些插件中大多都包含有木马。那么,这些被窃取的账户数据,又会用于什么目的呢?知名移动游戏媒体触乐网在 8 月 25 日曾报道称,名为“蔷薇予酒”的 iPhone 用户发现自己 App Store 中的已购项目中出现了一些自己从来没有下载过的应用。这样的事情并非个例,在某论坛以“盗刷”二字为关键词进行搜索的话,便可以看到大量的用户反馈。不过,和偷取苹果账号来进行应用刷榜外,之后的几个隐藏风险就显得更为“恶心”了——譬如通过内置功能对 iOS 设备机主进行勒索,在本地禁用任何类型的解锁操作,或是先将你的设备锁定,然后发送信息勒索用户,让你只能选择付款才会帮你解锁。▲KeyRaider 可以通过内置的锁定功能来进行勒索事件的最后,越狱用户们可以选择安装名为“mischa07 木马检测清理”的插件,清除之后再修改自己的 Apple ID 和密码。另一方面,苹果官方也展开了对该事件的动作,将泄露的 10 万个的 iCloud 账号和密码全部进行了重置操作。我们无法挖掘出本次事件的真正元凶,但考虑到国内 iOS 越狱产业背后存在着巨大的利益链,这些敞开大门的越狱用户被当成“肉鸡”,也就不让人意外了。唯独一点可以确定的,那就是“越狱”这件事,被迫再次站在了风口浪尖。越狱,从最初的“潮流前线”到现在的“政治不正确”,到底都经历了什么?早已变味的市场iOS 越狱的起源很早,甚至可以追溯到第一代 iPhone 手机:2007 年 7 月,开发人员就发布了第一个越狱工具,随后的八年时间里,从 iOS 1 到 iOS 8,基本每一版系统都有着对应的越狱工具。而在最初的iOS用户眼中,越狱才是“正确”的选择:依靠安装各色插件来实现各种需求才是那时候用户所追求的“玩手机”。▲iOS 7 以后,越狱基本由中国团队占据主导地位(资料来源:维基百科)iOS 7 时代到来,越狱工具的发布开始由中国团队占据主导地位,名为太极和盘古的两支中国越狱团队几乎完全包揽了 iOS 7-8 所有版本的越狱工具的制作和放出,而此时的越狱,开始与“赞助”、“投资”、“市场”等词汇夹杂在一起,背后也牵扯出一条几乎不为人所知的利益链。iOS 越狱,已经从当初的那种追求自由的英雄主义,逐渐变成了追名逐利的商业工具。《福布斯》作者 Thomas Fox-Brewster 在 2015 年 6 月底便发文披露了目前中国 iOS 越狱圈的一些利益纠纷和金钱交易状况。而友盟的数据也显示,在 2012 年,中国有一半以上的 iPhone 用户通过越狱来进行定制、修改或是 App下载,而到了 2014 年 9 月,这一数字下滑到了 13.4%。虽然如今越狱用“日渐式微”来形容并不为过,但哪怕只有这不到 15% 的用户,以 iPhone 在中国的庞大基数,依旧有着数百万的用户量。这个灰色市场是有利可图的,国内互联网的行业巨头都会通过扶持第三方应用商店——也就是各类“助手”,间接为越狱团队提供金钱上的资助,用户在越狱后,会被鼓励安装这些第三方助手类商店,而应用分发和游戏运营收入也是显而易见的。▲国内某助手的介绍页面,“不要钱的App Store”字样十分显眼一方面,iOS 系统的漏洞也越来越少,单个漏洞的价值也水涨船高,不仅仅是行业巨头,有时候连政府调查组织甚至是私人买家也会对这些漏洞产生兴趣。据悉,一个普通的漏洞价格大约在三四万美元左右,但如果是一个有价值的 iOS 漏洞,交易价格可能会高达百万美金。另一方面,国内这些第三方 iOS 商店,还在越狱外找到了另一条生财之道:它们可以利用企业证书认证的“盲点”进行批量设备授权,使得无需越狱、无需 Apple ID 的 iOS 用户也可以免费安装自己并未购买的 APP —— 甚至是一些收费应用,从中来赚取推广费用。但是,当你的设备不越狱都可以装盗版应用时,为何大公司还要资助国内越狱组织然后再给用户装一个第三方商店助手呢?“看似画蛇添足,本质上,还是想争夺推广这块市场。”在国内团队涉入这个市场之前,iOS 越狱本身是一件较为纯粹的事情,好比一个人被关在牢里很久,渴望过着自己能够掌控的生活。“对国外的那些顶级黑客来说,他们只是希望掌控自己的设备,而不是让苹果来告诉他们应该怎么用。”而在某技术组的 CDSQ 看来,越狱其实就是为了设备功能的最大化和定制化。“iOS 是一个封闭的系统,一切按苹果自己的方式去走,真正的越狱不是渴望犯罪,而是塑造新的自我,它像是为你打开了一扇门,并告知你,你重获自由了。但这时候便出现了两种人,有的人出来以后成就了完全不同的新的自我;但有人出来后就有恃无恐,最终便会自讨苦吃。”自由的两面性我记得我第一次买 iPhone 4 的时候,商家会主动提出帮忙越狱,如果询问原因,给出的答复就是“可以下载所有的付费软件”。在很多开发者们眼里,越狱的初衷并不是盗版,也不是盗刷,但越狱作为一个没有感情色彩的工具,在不同人手中起到了完全相反的效果。▲Geohot,破解 iPhone 第一人,人称“神奇小子”CDSQ 称,现在的越狱就是开个程序点一下按键的事,但大部分的人根本不知道越狱能干什么。“越狱只是帮你开了门,但机会就是给有准备的人,要不然就是刘姥姥进了大观园,门一开,自己就懵了。”“从一开始,它的概念就已经不对了。”不希望越狱被误解是 JailbreakHum 创办越狱指南网站的初衷之一。“大部分人对越狱的偏见极其普遍,认为越狱就等同于盗版,而商家、媒体和越狱开发者三边,都没有起到很好的引导作用。”作为一家试图掌控完整生态链的公司,虽然苹果官方一直未在公开场合发表过对越狱的看法,但从其保修条款中可以看到,苹果是极力反对开放 iOS 系统权限的行为,所以越狱这件事基本不可能会得到官方的认可,其合法地位也仅仅是依靠美国的数字千年版权法来维持。但实际上,安装盗版应用根本未曾列在越狱后试图实现的功能点中,更多的还是 Cydia 商店中适用于 iOS 或其他应用程序的扩展和定制,它们被称作是“插件”(Tweaks) ,这些插件可以达到个性化的目的,定制用户界面和字体,为iOS设备添加新功能等。譬如通过 Gestr 插件来自定义手势快速打开指定应用、亦或者是修改状态栏元素位置的插件 Moveable。也难怪有人戏称,苹果每年的 iOS 系统更新都在进行“借鉴”,因为部分新功能很早就能在越狱插件中实现。不过对这个观点,JailbreakHum 并不以为然:“苹果是一家有自己的节奏的公司,它有自己的想法和进度,只有确保自己的硬件能够充分展示软件的性能的时候,它才会放出这个功能。比如分屏,之前通过越狱插件比如 Quesar 的确能实现,但只有当苹果认为 RAM 和屏幕两者都达到一定水准的时候,把这个功能释放出来才有意义。所以现在我们可以在 iPad Air 2 和 iPad Pro 上实现分屏,体验也相当棒。”▲Priority Hub&插件:优化了锁屏通知的显示方式另外的典型则是“模仿”苹果已经实现的 —— 如 UniversalForce 等能够在
和 6s Plus 以外的机型实现 3D Touch 的部分功能。不过其中愿意使用正版源和正版插件的用户只占少部分,大多数人更愿意去添加国内的插件源,一方面可以避免语言不通问题,另一点则是朝着“免费”二字而去的。“iOS 系统设计了一个沙盒机制,每一个应用是放在自己的盒子里面的,所以它们也不能动盒子外的东西;但是插件不会受沙盒的束缚,它们就像是在系统内随意游走的小鱼。”Cydia 中的正规插件只是调用几个简单的权限,但如果是盗版插件,说不定就意味着会捆绑木马和病毒,然后肆无忌惮的在设备中检索各种它们感兴趣的信息。据 JailbreakHum 介绍,目前正版插件均会由几大正版源的官方审核者进行检查,有漏网之鱼也会很快有安全专家发现。但这一次爆发的 iCloud 泄露问题,则是由抢红包等几款盗版插件所引起的。“归根结底还是一个字:贪!”针对越狱后的手机安全,CDSQ 也坦言:“世上没有绝对的安全,谬论在于,不能因为越狱了,什么问题都怪越狱,有时候它不过是替罪羊而已。”大众已经尝到了不付费的甜头,不越狱的用户有问题,有苹果兜着;而越狱用户出了问题,根本找不到责任人,所以也难怪让越狱这个大概念兜着。几次三番下来,越狱身上背负的负面新闻越来越多,慢慢成为了一个惹人诟病的概念。越还是不越?这本身就是一个问题越狱其实是件自带“壁垒”的事儿,除了那些目标明确,想专门跑到外面“钻空子”的用户可能会面临种种未知的风险,热衷于享受自由空气的国内初学者玩家也同样会碰壁不少 —— 不仅是因为大量英文和晦涩难懂的技术语言,还有的是对长篇的指导和教程“敬而远之”。“我们买一个 iPhone 手机,只发挥了它 30-40% 的潜力,也没多少人会觉得不够用;但如果你选择越狱,你就必须要有一定应对问题的能力和动手能力,不然你就会举步维艰,倒不如继续在笼子里当金丝雀。”作为一个不怕折腾的重度用户,JailbreakHum 经常会被网络上的“伸手党”们问差不多的问题,也对大环境下人们普遍的浮躁有些无奈:“如果用户觉得一个软件很难用,基本就不会用你了。互联网环境和产品在让人变懒,人们开始变得浮躁,也不愿意看很长的文章和书籍,都养成了爽完忘爽完忘的习惯。整个大环境下,人们都不太愿意去学习不太必要的东西,这是一个很残酷的现实。”更重要的是,随着 iOS 系统的逐渐完善,加上苹果对中国市场的重视程度逐渐提高,越狱后的插件功能已经越来越少有那种像“输入法”或“来电归属地”这样的刚需产物,更多的是锦上添花:“现在的插件更多是比较新奇的,起到的是一个个性化的作用而不是功能性的,比如消除角标这类。所以我现在会依然关注插件这部分,但是不常用。”JailbreakHum 现在是 App 和插件两边兼顾,选择这样两手抓的目的也很明确——为了效率。“越狱也好,折腾效率类的 App 也好,其实最终达到的目的都是提高效率,只是途径不同而已。”此前他一直都在做一档叫做《TalkJB》的播客,而最近为了专门聊关于效率的内容,他正在准备开一个名为《Checked》的新播客。“有些事情 iOS 原生系统是无论如何都做不到的,但是公众意识不到。现在 iOS 每次出一个大版本更新,媒体宣传的噱头都是‘引入 xxx 功能,以后再也不需要越狱了!’,这会给不了解的人以错觉,觉得越狱要么是为了用盗版,要么是为了实现某个特定功能。以前的‘政治正确’是‘你不越狱苹果手机能用?’,现在的‘政治正确’是‘谁还需要越狱啊?’”“既然越狱不是大众需求,为什么你们还会支持越狱工具的公开化?”我抛出了这个疑惑。在 CDSQ 和 JailbreakHum 他们看来,越狱工具的公开化好比是解放个人自由一般的存在,倒是颇有点电影《V 字仇杀队》的味道 —— 追求毫无约束的自由,并赋予自由选择的权力。“你我都不喜欢一个家长式管理的环境,所以我只能给你一个忠告,前面是分叉的十字路口,但到底怎么走,全是你的自由。”想要获取自由,自然也需要付出对应的代价。越狱就像是在将人放进了一个原始森林,但里面没有一个地标,所以对初学者来说,很容易就迷路了。可以预见的是,随着 iOS 系统的完善和安全性的提高,越狱的这个市场会继续慢慢缩水,而当市场的利益链断掉后,也许会回到最开始的状态——因兴趣而生,真正属于少数派极客们的东西,而不是大众的玩物。这似乎也回归到了越狱玩家们的“初心”,也未尝不是一件好事。“但还有一个更糟糕的状态,”JailbreakHum 最后谈到:“这个东西变得不酷了,很多追求与众不同的人也会对越狱失去兴趣,希望以插件付费谋利的人也不会再去更新,这时越狱就会变成一个很私人的东西。那越狱这件事,也许就会真的销声匿迹。”如果你现在还想试着越狱享受越狱带来的乐趣的话,其实也并不难。大概只需要记住以下几点:不要怕全英文界面不要安装任何来历不明的插件和 App不要忘记你为什么而越狱
老子越狱,纯属为了来电归属地插件 kuaidial 和导航栏插件CCCsetting
装插件,上滑回桌面或切换程序,减少home键的使用。
不要跟苹果较劲
老子越狱,纯属为了来电归属地插件 kuaidial 和导航栏插件CCCsetting
装插件,上滑回桌面或切换程序,减少home键的使用。
不要跟苹果较劲
越狱的有什么好说的,活该倒霉
越狱,只为了Virtual Home和ccsettings而已,还有破解内购,哈哈~
ahchoow 发表于
装插件,上滑回桌面或切换程序,减少home键的使用。
完全可以用苹果的小白点来代替home键吗。
iphone没有越yu就一垛砖功能,不多说了:ios9.1啥时越丫!!亲爱的大神!我己经等了好几个月啦……
ahchoow 发表于
装插件,上滑回桌面或切换程序,减少home键的使用。
呵呵,那个虚拟按键虽然丑了点,但是也能完成一样的操作,
就喜欢越狱,你管得着?
iOS 越狱,已经从当初的那种追求自由的英雄主义,逐渐变成了追名逐利的商业工具。
上了8时代用5的时候越狱只为4g,现在换机了,越狱对我来说没什么卵用,该玩的在5时候玩厌了
苦逼的1528越狱是为了用4G,别的都不感兴趣
越。狱是把双刃剑
笑淡化了那伤 发表于
苦逼的1528越狱是为了用4G,别的都不感兴趣
同感,越狱只为4g。。
狱的有什么好说的,活该倒霉
狱的有什么好说的,活该倒霉
狱的有什么好说的,活该倒霉狱的有什么好说的,活该倒霉
啊嘎嘎是个
我不越狱完全是因为越狱支付宝不能设指纹锁
以前越狱是为了装输入法之类的应用,偶尔玩玩游戏,现在工作忙,输入法也可以装了。所以不需要越狱了。。。。
支持键盘翻页 ( 左右 )&
您需要登录后才可以回帖&&&|&&&&&
用户名/注册邮箱/注册手机号
其他第三方号登录2077人阅读
OC语言(39)
IOS开发(65)
IOS实用开发技巧(72)
Swift(14)
项目篇(31)
智者人生(17)
&&&&&&& 从事iOS开发有些年月了,从最开始的磕磕绊绊,不知所措,到现在的遇到困难都能快速做出最佳方案处理,中间经历了不可或缺的痛苦。在项目开发中,本人有用印象笔记记录的习惯,所以很多重复出现的坑,很快迎刃而解,而不在同一个地方摔倒两次。为此,特意总结了一下开发中经常遇到的坑,有些可能和你形成共鸣,有些在你看来或许是小儿科,不喜勿喷。1.XCode8的项目在xcode7运行报错:The document “ViewController.xib” requires Xcode 8.0 or later. This version does not support documents saved in the Xcode 8 format. Open this document with Xcode 8.0 or later.有两种方法解决这个问题:1.你同事也升级Xcode8,比较推荐这种方式,应该迎接改变。2.右击XIB或SB文件 -& Open as -& Source Code,删除xml文件中下面一行字段。2.场景:tabbar左右pan手势切换,其中一个VC是UIPageViewController,这样会导致到pageView的时候不能切换tabbar,如何禁掉pageVC切换呢?出于UIPageViewController和UItableView等产生手势冲突,我们往往要禁用其翻页手势,代码如下:self.pageViewController.dataSource =网络上搜到的重写手势等方法,亲测无效,所以给出这个最简单粗暴的方法。// tabbar的切换动画(一般不用哦)
- (void)viewWillDisappear:(BOOL)animated
[super viewWillDisappear:animated];
CATransition *transition = [CATransition animation];
[transition setDuration:1];
[transition setType:@&fade&];
[self.tabBarController.view.layer addAnimation:transition forKey:nil];
}// 解决带有轮播图的手势冲突
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
if (touch.view.frame.origin.y&100){
return NO;
return YES;
}//1,禁止.DS_store生成:
打开 “终端” ,复制黏贴下面的命令,回车执行,重启Mac即可生效。
defaults write com.apple.desktopservices DSDontWriteNetworkStores -bool TRUE
//2,恢复.DS_store生成:
defaults delete com.apple.desktopservices DSDontWriteNetworkStores3.FMDB根据条件查询数据库出现的错误:解决办法:4.后台数据中出现空格特殊字符:问题:注意选项A...我竟然匹配不到这种字符, \r\n\t都不行方案:中文全角空格...你想说什么...我转了下...\u3000 &已解决!5.浮点型取整问题://Objective-C拓展了C,自然很多用法是和C一致的。比如浮点数转化成整数,就有以下四种情况。
//1.简单粗暴,直接转化
float f = 1.5; a = (int)f; NSLog(&a = %d&,a);
//输出结果是1。(int)是强制类型转化,丢弃浮点数的小数部分。
//2.高斯函数,向下取整
float f = 1.6; a = floor(f); NSLog(&a = %d&,a);
//输出结果是1。floor()方法是向下取整,类似于数学中的高斯函数 [].取得不大于浮点数的最大整数,对于正数来说是舍弃浮点数部分,对于复数来说,舍弃浮点数部分后再减1.
//3.ceil函数,向上取整。
float f = 1.5; a = ceil(f); NSLog(&a = %d&,a);
//输出结果是2。ceil()方法是向上取整,取得不小于浮点数的最小整数,对于正数来说是舍弃浮点数部分并加1,对于复数来说就是舍弃浮点数部分.
//4.通过强制类型转换四舍五入。
float f = 1.5; a = (int)(f+0.5); NSLog(&a = %d&,a);6.关于block传值及数据同步总结:A B C三个界面间C界面修改内容达到AB界面刷新最新的数据保持ABC数据同步:1.C到B可以用block回调传值 2.B界面到A界面只需在B界面Back的时候发出拉取数据并刷新cell即可解决数据不同步现象。//在iOS开发过程中, 我们可能会碰到一些系统方法弃用, weak、循环引用、不能执行之类的警告。 有代码洁癖的孩子们很想消除他们, 今天就让我们来一次Fuck 警告!!
//首先学会基本的语句
#pragma clang diagnostic push
#pragma clang diagnostic ignored &-Wdeprecated-declarations&
//这里写出现警告的代码
#pragma clang diagnostic pop
//这样就消除了方法弃用的警告!7.iOS8调用相机警告:错误代码:Snapshotting a view that has not been rendered results in an empty snapshot. Ensure your view has been rendered at least once before snapshotting orsnapshot after screen updates.IOS8多了一个样式UIModalPresentationOverCurrentContext,IOS8中 presentViewController时请将控制器的modalPresentationStyle设置为 UIModalPresentationOverCurrentContext,问题解决!!8.错误点: ENABLE_BITCODE错误设置(mrc下)解决方法:// 默认选中第一行
[tableView selectRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] animated:NO scrollPosition:UITableViewScrollPositionNone];
// 实现了选中第一行的方法
[self tableView:_mainIndustryTableView didSelectRowAtIndexPath:[NSIndexPath indexPathForItem:0 inSection:0]];
// 默认下选中状态
- (void)customAtIndex:(UITableView *)tableView
// 默认选中第一行
[tableView selectRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] animated:NO scrollPosition:UITableViewScrollPositionNone];
if ([tableView isEqual:_mainIndustryTableView]) {
[self tableView:tableView didSelectRowAtIndexPath:[NSIndexPath indexPathForItem:0 inSection:0]];
}9.iOS headerview与tableview之间距离控制?//view 作为 tableView 的 tableHeaderView,单纯的改变 view 的 frame 是无济于事的,tableView
不会大度到时刻适应它的高度(以后 Apple 会不会改变就不知道了),
//所以,如何告诉tableView 它的 tableHeaderView 已经改变了?很简单,就一句话(关键最后一句):
[webView sizeToFit];
CGRect newFrame = headerView.
newFrame.size.height = newFrame.size.height + webView.frame.size.
headerView.frame = newF
[self.tableView setTableHeaderView:headerView];
//这样以后,效果就出来了。不过这种过度显得有些生硬,能不能加一点点动画,让它变得顺眼一些呢?试试下面的代码:
[self.tableView beginUpdates];
[self.tableView setTableHeaderView:headerView];
[self.tableView endUpdates];10.cell 分割线不全:-(void)viewDidLayoutSubviews {
if ([_listTableView respondsToSelector:@selector(setSeparatorInset:)]) {
[_listTableView setSeparatorInset:UIEdgeInsetsZero];
if ([_listTableView respondsToSelector:@selector(setLayoutMargins:)])
[_listTableView setLayoutMargins:UIEdgeInsetsZero];
-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPat{
if ([cell respondsToSelector:@selector(setLayoutMargins:)]) {
[cell setLayoutMargins:UIEdgeInsetsZero];
if ([cell respondsToSelector:@selector(setSeparatorInset:)]){
[cell setSeparatorInset:UIEdgeInsetsZero];
// 自绘分割线
- (void)drawRect:(CGRect)rect
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetFillColorWithColor(context, [UIColor whiteColor].CGColor);
CGContextFillRect(context, rect);
CGContextSetStrokeColorWithColor(context, [UIColor colorWithRed:0xE2/255.0f green:0xE2/255.0f blue:0xE2/255.0f alpha:1].CGColor);
CGContextStrokeRect(context, CGRectMake(0, rect.size.height - 1, rect.size.width, 1));
}11.iOS7.0以后的UILabel会自动将Text行尾的空白字符全部去除,除了常见的半角空格(\0×20)和制表符(\t)之外,全角空格 (\u3000)也被计算在内,甚至连多余的换行符(\r,\n)也被自动去除了。这一点虽然方便直接将控件赋值和无需取值后再trim,但是太过智能化 了之后,往往不能满足一些本可以简单实现的需求。需求1.使用添加\n方式将上下文本连续空两行,即实现文本的2倍行距。 iOS7.0之前解决办法:在每个换行符后面添加一个空格 即如果要显示为: aaaaaaa空行空行bbbbbb使用以下格式进行文本赋值lbl.text = @&aaaaaaa\n\u0020\n\u0020bbbbbb&;iOS7.0之后需要增加,不增加则无效lbl.numberOfLines = 0; // 0表示行数不固定lbl.lineBreakMode=UILineBreakModeWordW // 允许换行(可选)需求2.在所有的UILabel的text后增加一个空格,并使text右对齐。 iOS7.0之前解决办法:直接在text后增加空格即可,即text在赋值前增加空格。 lbl.text = [ stringWithFormat:@&%@%@&,&aaaaa&,&\u0020&];iOS7.0之后需要重写UILabel的drawTextInRect方法,通过缩短默认文本绘制Rect的宽度半个字体宽度来实现。(当然也可以在底部铺一个view调整,暨简单又高效)具体实现代码如下:#import &MyLabel.h&
@implementation MyLabel
-(id) initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
-(void) drawTextInRect:(CGRect)rect {
//从将文本的绘制Rect宽度缩短半个字体宽度
//self.font.pointSize / 2
return [super drawTextInRect:CGRectMake(rect.origin.x, rect.origin.y, rect.size.width - self.font.pointSize / 2, rect.size.height)];
//UILabel会自动清除的空白字符(UNICODE)
\u0009 CHARACTER TABULATION
\u000A LINE FEED
\u000D CARRIAGE RETURN
\u0020 SPACE
\u0085 NEXT LINE
\u00A0 NBSP
\u1680 OGHAM SPACE MARK
\u180E MONGOLIAN VOWEL SEPARATOR
\u2000 EN QUAD
\u200A HAIR SPACE
\u200B ZERO WIDTH SPACE
\u2028 LINE SEPARATOR
\u2029 PARAGRAPH SEPARATOR
\u202F NARROW NO-BREAK SPACE
\u205F MEDIUM MATHEMATICAL SPACE
\u3000 IDEOGRAPHIC SPACE 12.监听UITextField的text的变化:// 注册监听
[[NSNotificationCenter defaultCenter]postNotificationName:UITextFieldTextDidChangeNotification object:nil];
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(changeForKeyWord:) name:UITextFieldTextDidChangeNotification object:nil];
// 监听关键词变化
- (void)changeForKeyWord:(NSNotification *)sender
// 关键词改变时清除地区查询条件纪录
[[NSUserDefaults standardUserDefaults]setObject:@&0& forKey:@&proRow&];
[[NSUserDefaults standardUserDefaults]setObject:@&0& forKey:@&section&];
//监听UITextField的点击事件
[[NSNotificationCenter defaultCenter]postNotificationName:UITextFieldTextDidBeginEditingNotification object:nil];
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(enterEdited:) name:UITextFieldTextDidBeginEditingNotification object:nil];
- (void)enterEdited:(NSNotification *)sender
//事件写这里!希望帮到你!
} 13.改变cell的选中颜色:cell.selectedBackgroundView = [[UIView alloc] initWithFrame:cell.frame];
cell.selectedBackgroundView.backgroundColor = COLOR_BACKGROUNDVIEW;
//不需要任何颜色可以这么设置:
cell.selectionStyle = UITableViewCellSelectionStyleN14.旋转图片:#pragma mark ----- 更新按钮动画
- (void)rotate360DegreeWithImageViews:(UIImageView *)myViews{
CABasicAnimation *rotationAnimation = [CABasicAnimation animationWithKeyPath:@&transform.rotation.z&];
rotationAnimation.toValue = [NSNumber numberWithFloat: M_PI * 2.0 ];
rotationAnimation.duration = 1.0;
rotationAnimation.cumulative = YES;rotate360DegreeWithImageViews
rotationAnimation.repeatCount = 100000;
[myViews.layer addAnimation:rotationAnimation forKey:@&rotationAnimation&];
[myViews.layer removeAllAnimations]; // 停止15.UIView的exclusiveTouch属性:通过设置[self setExclusiveTouch:YES];可以达到同一界面上多个控件接受事件时的排他性,从而避免一些问题。//1. 设置的时候在ib里面记得选择无边框的,要不然随便你设置,都是无效的,也是坑死了。
_textBoxName.layer.borderWidth=1.0f;
_textBoxName.layer.borderColor=[UIColorcolorWithRed:0xbf/255.0fgreen:0xbf/255.0fblue:0xbf/255.0falpha:1].CGC
//2.在uitextfield 中文字最左边距离左侧边框的距离
_textBoxName.leftView=[[UIViewalloc] initWithFrame:CGRectMake(0,0, 16,51)];
_textBoxName.leftViewMode=UITextFieldViewModeA16.当你使用 UISearchController 在 UITableView 中实现搜索条,在搜索框已经激活并推入新的 VC 的时候会发生搜索框重叠的情况:解决办法:那就是 definesPresentationContext 这个布尔值。17.画个曲线如何做呢?如图: UIView *myCustomView = [[UIView alloc]initWithFrame:CGRectMake(0, 204,kScreenWidth, 120)];
myCustomView.backgroundColor = [UIColor whiteColor];
[view addSubview:myCustomView];
UIBezierPath *bezierPath = [UIBezierPath bezierPath];
[bezierPath moveToPoint:CGPointMake(0,0)];
[bezierPath addCurveToPoint:CGPointMake(myCustomView.width, 0) controlPoint1:CGPointMake(0, 0) controlPoint2:CGPointMake(myCustomView.width/2, 40)];
[bezierPath addLineToPoint:CGPointMake(myCustomView.width, myCustomView.height)];
[bezierPath addLineToPoint:CGPointMake(0, myCustomView.height)];
[bezierPath closePath];
CAShapeLayer *shapLayer = [CAShapeLayer layer];
shapLayer.path = bezierPath.CGP
myCustomView.layer.mask = shapL
myCustomView.layer.masksToBounds = YES;18.有效解决刷新单个cell或者section闪一下的问题:[UIView setAnimationsEnabled:NO];
[_listTable beginUpdates];
[_listTable reloadSections:[NSIndexSet indexSetWithIndex:indexPath.section] withRowAnimation:UITableViewRowAnimationNone];
[_listTable endUpdates];
[UIView setAnimationsEnabled:YES];19.保持imageView 图片不变形:_topImageView.contentMode = UIViewContentModeScaleAspectF[__NSArrayI addObject:]: unrecognized selector sent to instance
//当我创建了一个NSMutableArray 对象的时候
@property (nonatomic,copy)NSMutableArray *
//然后通过addObject运行就会报错,[__NSArrayI addObject:]: unrecognized selector sent to instance
//解决方法:copy改成strong20.Label后加小图标:NSMutableAttributedString *attri = [[NSMutableAttributedString alloc] initWithString:[NSString stringWithFormat:@&%@ &,fields.title]];
// 添加表情
NSTextAttachment *attch = [[NSTextAttachment alloc] init];
// 表情图片
attch.image = [UIImage imageNamed:@&newTopList&];
// 设置图片大小
attch.bounds = CGRectMake(10, 0, 25, 14);
if ([fields.isnew boolValue]) {
// 创建带有图片的富文本
NSAttributedString *strings = [NSAttributedString attributedStringWithAttachment:attch];
[attri appendAttributedString:strings];
// 用label的attributedText属性来使用富文本
_titleLabel.attributedText =21.状态栏字体颜色及背景颜色调整:UIView *statusBarView=[[UIView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, 20)];
statusBarView.backgroundColor= [UIColor whiteColor];
[self.view addSubview:statusBarView];
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault animated:NO];22.xib加载不同尺寸的屏幕如何控制宽高?- (void)viewDidLoad {
[super viewDidLoad];
myView = [[MyView alloc]initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, 206)];
[self.view addSubview:myView];
- (void)viewDidLayoutSubviews {
[super viewDidLayoutSubviews];
//在这里计算尺寸
myView.myView.frame = CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, 206);
// 或者修改如下:
UIView *view = [[UIView alloc]initWithFrame:CGRectMake(0, 0, kScreenWidth-48, 232)];//310
GCVipGroupView *groupView = [[GCVipGroupView alloc]initWithFrame:view.frame andCollect:NO];
groupView.delegate =
groupView.bigView.frame = view.
[view addSubview:groupView];&23.我的位置(强制获取):MKMapItem *mylocation = [MKMapItem mapItemForCurrentLocation];
// 当前经纬度
float currentLatitude = mylocation.placemark.location.coordinate.
float currentLongitude = mylocation.placemark.location.coordinate.
// 默认位置(模拟器测试要注释掉才行)
[self setMapViewCenter:CLLocationCoordinate2DMake(currentLatitude, currentLongitude)];24.比如弹框上放了scrollowView第一次弹出需要裁剪,滑动时需要显示下面的内容:解决办法:让scrollowView的范围跟父视图同等高就解决了!25.去除多余cell不管用怎么办:self.searchResultTableView.tableFooterView = [[UIView alloc]init];
//或者加一个:
self.searchResultTableView.separatorStyle = UITableViewCellSeparatorStyleN26.判断页面消失或出现时是push还是pop操作:- (void)viewWillDisappear:(BOOL)animated {
NSArray *viewControllers = self.navigationController.viewC//获取当前的视图控制其
if (viewControllers.count & 1 && [viewControllers objectAtIndex:viewControllers.count-2] == self) {
//当前视图控制器在栈中,故为push操作
NSLog(@&push&);
} else if ([viewControllers indexOfObject:self] == NSNotFound) {
//当前视图控制器不在栈中,故为pop操作
NSLog(@&pop&);
}27.运行环境问题:A valid provisioning profile for this executable was not found.解决问题所在:发布证书无法运行在真机上!!!每周更新关注:& 新浪微博!手机加iOS开发者交流QQ群:
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:444359次
积分:5588
积分:5588
排名:第4682名
原创:233篇
评论:170条
iOS开发者交流群: ①群: ②群:
关注我的技术公众号,每天都有优质技术文章推送。
微信关注我的公众号
阅读:14280
阅读:11909
文章:27篇
阅读:64703
文章:105篇
阅读:353006
有空帮我喂下仓鼠,谢谢!

我要回帖

更多关于 ios 设置状态栏颜色 的文章

 

随机推荐