笔记整理(转)

在iOS开发中常常须要使用的或不经常使用的知识点的总结,几年的收藏和积累(踩过的坑)。ios

1、 iPhone Size

手机型号 屏幕尺寸
iPhone 4 4s 320 * 480
iPhone 5 5s 320 * 568
iPhone 6 6s 375 * 667
iphone 6 plus 6s plus 414 * 736

2、 给navigation Bar 设置 title 颜色

 

 

3、 如何把一个CGPoint存入数组里

 

谢谢@bigParis的建议,能够用NSValue进行基础数据的保存,用这个方法更加清晰明确。git

如今Xcode7后OC支持泛型了,能够用NSMutableArray *array来保存。github

4、 UIColor 获取 RGB 值

 

 

5、 修改textField的placeholder的字体颜色、大小

 

 

6、两点之间的距离

 

 

7、IOS开发-关闭/收起键盘方法总结

一、点击Return按扭时收起键盘web

二、点击背景View收起键盘(你的View必须是继承于UIControl)sql

三、你能够在任何地方加上这句话,能够用来统一收起键盘json

 

8、在使用 ImagesQA.xcassets 时须要注意

将图片直接拖入image到ImagesQA.xcassets中时,图片的名字会保留。
这个时候若是图片的名字过长,那么这个名字会存入到ImagesQA.xcassets中,名字过长会引发SourceTree判断异常。windows

9、UIPickerView 判断开始选择到选择结束

开始选择的,须要在继承UiPickerView,建立一个子类,在子类中重载数组

[super hitTest:point withEvent:event]返回不是nil的时候,说明是点击中UIPickerView中了。
结束选择的, 实现UIPickerView的delegate方法xcode

当调用这个方法的时候,说明选择已经结束了。缓存

10、iOS模拟器 键盘事件

当iOS模拟器 选择了Keybaord->Connect Hardware keyboard 后,不弹出键盘。


当代码中添加了

进行键盘事件的获取。那么在此情景下将不会调用- (void)keyboardWillHide.
由于没有键盘的隐藏和显示。

11、在ios7上使用size classes后上面下面黑色

使用了size classes后,在ios7的模拟器上出现了上面和下面部分的黑色

能够在General->App Icons and Launch Images->Launch Images Source中设置Images.xcassets来解决。

 

十一.png

12、设置不一样size在size classes

Font中设置不一样的size classes。

 

十二.png

十3、线程中更新 UILabel的text

 

label1 为UILabel,当在子线程中,须要进行text的更新的时候,可使用这个方法来更新。
其余的UIView 也都是同样的。

十4、使用UIScrollViewKeyboardDismissMode实现了Message app的行为

像Messages app同样在滚动的时候可让键盘消失是一种很是好的体验。然而,将这种行为整合到你的app很难。幸运的是,苹果给UIScrollView添加了一个很好用的属性keyboardDismissMode,这样能够方便不少。

如今仅仅只须要在Storyboard中改变一个简单的属性,或者增长一行代码,你的app能够和办到和Messages app同样的事情了。

这个属性使用了新的UIScrollViewKeyboardDismissMode enum枚举类型。这个enum枚举类型可能的值以下:

如下是让键盘能够在滚动的时候消失须要设置的属性:

 

十四.png

十5、报错 “_sqlite3_bind_blob”, referenced from:

将 sqlite3.dylib加载到framework

十6、ios7 statusbar 文字颜色

iOS7上,默认status bar字体颜色是黑色的,要修改成白色的须要在infoPlist里设置UIViewControllerBasedStatusBarAppearance为NO,而后在代码里添加:
[application setStatusBarStyle:UIStatusBarStyleLightContent];

十7、得到当前硬盘空间

 

 

十8、给UIView 设置透明度,不影响其余sub views

UIView设置了alpha值,但其中的内容也跟着变透明。有没有解决办法?

设置background color的颜色中的透明度

好比:

设置了color的alpha, 就能够实现背景色有透明度,当其余sub views不受影响给color 添加 alpha,或修改alpha的值。

 

十9、将color转为UIImage

 

 

二10、NSTimer 用法

 

在NSRunLoop 中添加定时器.

二11、Bundle identifier 应用标示符

Bundle identifier 是应用的标示符,代表应用和其余APP的区别。

二12、NSDate 获取几年前的时间

eg. 获取到40年前的日期

 

二十3、iOS加载启动图的时候隐藏statusbar

只需须要在info.plist中加入Status bar is initially hidden 设置为YES就好

 

二十三.jpg

二十4、iOS 开发,工程中混合使用 ARC 和非ARC

Xcode 项目中咱们可使用 ARC 和非 ARC 的混合模式。

若是你的项目使用的非 ARC 模式,则为 ARC 模式的代码文件加入 -fobjc-arc 标签。

若是你的项目使用的是 ARC 模式,则为非 ARC 模式的代码文件加入 -fno-objc-arc 标签。

添加标签的方法:

  • 打开:你的target -> Build Phases -> Compile Sources.
  • 双击对应的 *.m 文件
  • 在弹出窗口中输入上面提到的标签 -fobjc-arc / -fno-objc-arc
  • 点击 done 保存

二十5、iOS7 中 boundingRectWithSize:options:attributes:context:计算文本尺寸的使用

以前使用了NSString类的sizeWithFont:constrainedToSize:lineBreakMode:方法,可是该方法已经被iOS7 Deprecated了,而iOS7新出了一个boudingRectWithSize:options:attributes:context方法来代替。
而具体怎么使用呢,尤为那个attribute

 

二十6、NSDate使用 注意

NSDate 在保存数据,传输数据中,通常最好使用UTC时间

在显示到界面给用户看的时候,须要转换为本地时间

二十7、在UIViewController中property的一个UIViewController的Present问题

若是在一个UIViewController A中有一个property属性为UIViewController B,实例化后,将BVC.view 添加到主UIViewController A.view上,若是在viewB上进行 - (void)presentViewController:(UIViewController *)viewControllerToPresent animated: (BOOL)flag completion:(void (^)(void))completion NS_AVAILABLE_IOS(5_0);的操做将会出现,“ Presenting view controllers on detached view controllers is discouraged ” 的问题。

觉得BVC已经present到AVC中了,因此再一次进行会出现错误。

可使用

来解决。

二十8、UITableViewCell indentationLevel 使用

UITableViewCell 属性 NSInteger indentationLevel 的使用, 对cell设置 indentationLevel的值,能够将cell 分级别。

还有 CGFloat indentationWidth; 属性,设置缩进的宽度。

总缩进的宽度: indentationLevel * indentationWidth

二十9、ActivityViewController 使用AirDrop分享

使用AirDrop 进行分享:

就能够弹出界面:

 

二十九.png

三10、获取CGRect的height

获取CGRect的height, 除了 self.createNewMessageTableView.frame.size.height 这样进行点语法获取。

还可使用CGRectGetHeight(self.createNewMessageTableView.frame) 进行直接获取。

除了这个方法还有 func CGRectGetWidth(rect: CGRect) -> CGFloat

等等简单地方法

 

三11、打印 %

 

 

三12、在工程中查看是否使用 IDFA

allentekiMac-mini:JiKaTongGit lihuaxie$ grep -r advertisingIdentifier .
grep: ./ios/Framework/AMapSearchKit.framework/Resources: No such file or directory
Binary file ./ios/Framework/MAMapKit.framework/MAMapKit matches
Binary file ./ios/Framework/MAMapKit.framework/Versions/2.4.1.e00ba6a/MAMapKit matches
Binary file ./ios/Framework/MAMapKit.framework/Versions/Current/MAMapKit matches
Binary file ./ios/JiKaTong.xcodeproj/project.xcworkspace/xcuserdata/lihuaxie.xcuserdatad/UserInterfaceState.xcuserstate matches
allentekiMac-mini:JiKaTongGit lihuaxie$

打开终端,到工程目录中, 输入:
grep -r advertisingIdentifier .

能够看到那些文件中用到了IDFA,若是用到了就会被显示出来。

三十3、APP 屏蔽 触发事件

 

 

三十4、设置Status bar颜色

status bar的颜色设置:

    1. 若是没有navigation bar, 直接设置 // make status bar background color
    2. 若是有navigation bar, 在navigation bar 添加一个view来设置颜色。// status bar color

      UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, -20, ScreenWidth, 20)];
      [view setBackgroundColor:COLOR_APP_MAIN];

[viewController.navigationController.navigationBar addSubview:view];

// Start
NSDictionary *parametersDic = [NSDictionary dictionaryWithObjectsAndKeys:
self.providerStr, KEY_LOGIN_PROVIDER,
token, KEY_TOKEN,
response, KEY_RESPONSE,
nil];

NSData jsonData = parametersDic == nil ? nil : [NSJSONSerialization dataWithJSONObject:parametersDic options:0 error:nil];
NSString 
requestBody = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];

  • (void)appendUserAgent
    {
    NSString oldAgent = [self.WebView stringByEvaluatingJavaScriptFromString:@"navigator.userAgent"];
    NSString 
    newAgent = [oldAgent stringByAppendingString:@"iOS"];

     

    NSDictionary *dic = [[NSDictionary alloc] initWithObjectsAndKeys:

    [[NSUserDefaults standardUserDefaults] registerDefaults:dic];
    }

    @“iOS” 为添加的自定义。

三十8、UIPasteboard 屏蔽paste 选项

当UIpasteboard的string 设置为@“” 时,那么string会成为nil。 就不会出现paste的选项。

三十9、class_addMethod 使用

当 ARC 环境下

class_addMethod([self class], @selector(resolveThisMethodDynamically), (IMP) myMethodIMP, “v@:”);

使用的时候@selector 须要使用super的class,否则会报错。
当MRC环境下

class_addMethod([EmptyClass class], @selector(sayHello2), (IMP)sayHello, “v@:”);

能够任意定义。可是系统会出现警告,忽略警告就能够。

四10、AFNetworking 传送 form-data

将JSON的数据,转化为NSData, 放入Request的body中。 发送到服务器就是form-data格式。

四11、非空判断注意

 

若是进行非空判断和类型判断时,须要新进行类型判断,再进行非空判断,否则会crash

四12、iOS 8.4 UIAlertView 键盘显示问题

能够在调用UIAlertView 以前进行键盘是否已经隐藏的判断。

 

四十3、模拟器中文输入法设置

模拟器默认的配置种没有“小地球”,只能输入英文。加入中文方法以下:

选择Settings—>General–>Keyboard–>International KeyBoards–>Add New Keyboard–>Chinese Simplified(PinYin) 即咱们通常用的简体中文拼音输入法,配置好后,再输入文字时,点击弹出键盘上的“小地球”就能够输入中文了。
若是不行,能够长按“小地球”选择中文。

四十4、iPhone number pad

phone 的键盘类型:

  1. number pad 只能输入数字,不能切换到其余输入

     

    number_pad.png
  2. phone pad 类型: 拨打电话的时候使用,能够输入数字和 + * #

     

    phone_pad.png

四十5、UIView 自带动画翻转界面

 

 

四十6、KVO 监听其余类的变量

 

在实现的类self中,进行[HXSLocationManager sharedManager]类中的变量@“currentBoxEntry.boxCodeStr” 监听。

四十7、ios9 crash animateWithDuration

在iOS9 中,若是进行animateWithDuration 时,view被release 那么会引发crash。

会crash。

不会Crash。

四十8、对NSString进行URL编码转换

iPTV项目中在删除影片时,URL中需传送用户名与影片ID两个参数。当用户名中带中文字符时,删除失败。

以前测试时,手机号绑定的用户名是英文或数字。换了手机号测试时才发现这个问题。

对于URL中有中文字符的状况,需对URL进行编码转换。

 

四十9、Xcode iOS加载图片只能用PNG

虽然在Xcode能够看到jpg的图片,可是在加载的时候会失败。
错误为 Could not load the “ReversalImage1” image referenced from a nib in the bun

必须使用PNG的图片。


若是须要使用JPG 须要添加后缀

 

五10、保存全屏为image

 

 

五11、判判定位状态 locationServicesEnabled

这个[CLLocationManager locationServicesEnabled]检测的是整个iOS系统的位置服务开关,没法检测当前应用是否被关闭。经过

CLAuthorizationStatus来判断是否能够访问GPS

五12、微信分享的时候注意大小

text 的大小必须 大于0 小于 10k

image 必须 小于 64k

url 必须 大于 0k

五十3、图片缓存的清空

通常使用SDWebImage 进行图片的显示和缓存,通常缓存的内容比较多了就须要进行清空缓存

清除SDWebImage的内存和硬盘时,能够同时清除session 和 cookie的缓存。

 

五十4、TableView Header View 跟随Tableview 滚动

当tableview的类型为 plain的时候,header View 就会停留在最上面。

当类型为 group的时候,header view 就会跟随tableview 一块儿滚动了。

五十5、TabBar的title 设置

在xib 或 storyboard 中能够进行tabBar的设置

 

五十五.png

其中badge 是自带的在图标上添加一个角标。

1. self.navigationItem.title 设置navigation的title 须要用这个进行设置。

2. self.title 在tab bar的主VC 中,进行设置self.title 会致使navigation 的title 和 tab bar的title一块儿被修改。

五十6、UITabBar,移除顶部的阴影

添加这两行代码:

顶部的阴影是在UIWindow上的,因此不能简单的设置就去除。

五十7、当一行中,多个UIKit 都是动态的宽度设置

 

五十七.png

设置horizontal的值,表示出现内容很长的时候,优先压缩这个UIKit。

五十8、JSON的“” 转换为nil

使用AFNetworking 时, 使用

这个参数 removesKeysWithNullValues 能够将null的值删除,那么就Value为nil了

// END

相关文章
相关标签/搜索