Text主要總結UILabel、UITextField、UITextView、UIMenuController以及UIWebView/WKWebView相關的一些問題。html
UI細節主要總結界面交互開發中遇到的一些細節問題,包括Masonry部分的問題。ios
動畫介紹最近用到的兩個,算是經常使用級別的,動畫這部分以後會專門研究總結下。正則表達式
最後介紹兩個工具及三個Xcode使用設置的問題。segmentfault
不限制UILabel的高度(寬度須要設置,肯定文字什麼時候換行),numberOfLines設爲0便可(設爲0表示不限制行數)。 緩存
好比對文字的行間距有要求、一行文字某幾個文字的大小、顏色有特殊要求等等,均可以經過NSMutableAttributedString來進行設置。網絡
設置lineBreakMode,好比達到換行條件時按單詞來換行NSLineBreakByWordWrapping,末尾顯示省略號的NSLineBreakByTruncatingTail等。app
clearButtonMode,設置一鍵清空按鈕顯示模式,通常是在編輯狀態下才顯示該按鈕 ide
placeholder/attributedPlaceholder,設置佔位文本,若是對樣式有特殊要求,好比顏色等,能夠設置attributedPlaceholder。工具
keyboardType,設置初始進入編輯狀態時,默認顯示的鍵盤類型 ,好比輸入手機號碼的地方,使用數字鍵盤UIKeyboardTypeNumberPad便可,可是實際使用時發現,若是安裝了第三方輸入法好比搜狗輸入法時,設置UIKeyboardTypeNumberPad不起做用,鍵盤仍然顯示爲其餘類型,設置爲UIKeyboardTypePhonePad則生效,不一樣的是UIKeyboardTypePhonePad相對UIKeyboardTypeNumberPad而言還容許輸入*, #,但基本樣式相同。佈局
下圖爲設置UIKeyboardTypePhonePad後的鍵盤類型
tintColor,好比對textField的編輯狀態下光標的顏色有要求,設置這個屬性便可。
tag,對於一個頁面含有多個textField,經常須要在代理方法中進行區別單獨處理,使用tag屬性標明便可,textView等也是經過tag來進行區分
secureTextEntry,設置輸入字符的明暗文顯示,設置爲YES輸入字符時則顯示爲*,通常密碼輸入時用到,但須要注意的時,針對系統原生的textField,若是添加了一個明暗文開關按鈕,經過控制該屬性來切換顯示模式時,會有一些問題,一是切換明暗文狀態切換到暗文狀態(secureTextEntry = YES),輸入字符時以前的字符串會狀況,而是暗文狀態下,結束編輯狀態在進入編輯狀態後,若是點擊刪除按鈕,會清空所有已輸入的字符。若是想切換狀態後輸入不清空,再次進入編輯狀態點擊刪除按鈕只刪除前一個字符,須要針對該屬性重寫一下textField。
textField不像textView,代理方法中是沒有DidChange事件方法的,可是能夠經過監聽UIControlEventEditingChanged達到一樣效果,進而限制輸入字數
update:iOS開發筆記12:iOS7上UITextField限制字數輸入致使崩潰問題
設置兩個屬性便可
在代理方法shouldChangeTextInRange中判斷識別處理便可---- if ([text isEqualToString:@"\n"]) {...}
textView自己沒有該屬性,實現方法是在textView上添加一個UILabel做爲placeholder,在代理方法中控制該label的顯示狀況,須要注意的是,UILabel若是直接加在textView上,後續調整佈局在iOS7的設備上可能會崩潰,建議將textView加在一個view上,再將UILabel加在此view上進行控制便可。
寫評論時若是字數較多,則textView的高度應該要隨着內容的增長而變高,固然還要有一個高度限制,不能無限制增加。
在textView中輸入字符時動態調整高度便可,如下方法在iOS七、八、9下測試可用
還有一個須要注意的問題,當再次進入編輯狀態且存有上一次的輸入草稿時,textView的光標通常應該顯示在最後一個字的末尾
一是判斷首位數字是否爲1,二是根據現有狀況判斷第二位數字有效性,三是驗證後續9個字符是否爲數字
須要注意三點,一是注意在代理方法中設置頂部狀態欄的轉圈,即[UIApplication sharedApplication].networkActivityIndicatorVisible
二是在willDisappear中須要作一些處理
三是loadRequest的時候注意忽略緩存,不然頁面可能不是最新數據
使用的與safari同樣的引擎,iOS8及以上系統建議使用WKWebView取代UIWebView,比UIWebView好用不少,而且支持進度條顯示。
當輸入對象被彈出的鍵盤遮擋時,經常須要作上移操做,獲取鍵盤高度是計算移動距離的關鍵之一,能夠在鍵盤通知事件中獲取其高度
須要注意的是,使用Masonry佈局cell時,必定不要忽略bottom屬性,由於是根據內容撐開的大小來計算高度,才能根據cell裏內容肯定從頂部到底部的距離,即cell的高度。
若是使用mas_updateConstraints方法是更新已經設置過的佈局屬性,使用mas_remakeConstraints是清除原有佈局設置,從新佈局。
對點擊區域進行判斷,當點擊區域在彈框範圍外,進行關閉操做便可
最經常使用三個,一是將view移動至最上層
二是將view移動至最下層
三是將view加載到window上
UIImageView默認userInteractionEnabled屬性爲NO,須要開啓,不然在上面添加UIButton後,點擊UIButton是沒法響應的,由於做爲父視圖的UIImageView的userInteractionEnabled屬性爲NO時,觸摸事件是不會繼續往下傳遞給子視圖的,子視圖永遠沒法處理觸摸事件。
好比一個很小的圖標須要支持點擊,須要注意增大UIButton的響應區域,考慮用戶的點擊體驗。
SDWebImage已經封裝了方法支持監控加載進度
使用輪播圖時注意關閉userInteractionEnabled屬性,不然點擊pageControl區域,小圓點index會變化。
iOS8以上建議用PHPhotoLibrary,使用ALAssetsLibrary當照片數量較多時可能會加載不徹底。
另外須要注意的是過濾非照片類型的數據,好比視頻等
選取一張漸變色的加載轉圈圖片,對圖片設置動畫效果
使用UIBezierPath畫一個矩形,控制點添加在中間,且注意最後一個點要閉合,根據滑動的距離,控制點的X座標隨之移動變化便可
效果以下
app使用友盟統計上線後,根據錯誤崩潰信息查找問題可使用「dSYM 」這個工具進行跟蹤處理。
mac上能夠下載該工具來模擬網絡環境進行測試,在真機上則能夠經過設置裏的開發者選項找到這些工具。
因爲設置啓動圖加載方式爲LaunchImage,可是沒有給圖片致使,系統會根據LaunchImage尺寸來決定顯示尺寸,添加LaunchImage後正常顯示
得到Xcode的UUID,添加到插件對應的工程裏,從新運行一遍便可正常使用。
獲取Xcode的UUID:「defaults read /Applications/Xcode.app/Contents/Info DVTPlugInCompatibilityUUID」
對於常常重複輸入的一些代碼,好比一些代理方法,佈局代碼等,使用代碼塊進行管理能夠提升效率,對於其中的變量,在設置代碼塊的時候,以<#變量名稱#>這樣的格式設置便可,下次使用時,編譯器就能識別出這裏須要輸入值。
(1)Text Programming Guide for iOS
(2)AssetsLibrary framework broken on iOS 8
(7)Understanding and Analyzing iOS Application Crash Reports
(8)Xcode插件 info.plist/DVTPlugInCompatibilityUUIDs
(9)dSYM 文件分析工具