筆記整理(轉)

在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

相關文章
相關標籤/搜索