IOS開發中遇到過的各種坑洞

脣齒相依發表於2017-07-27

做ios開發那麼多年了,遇到不少難題,也踩過不少坑洞,本來沒想要寫這篇文章的,但是鑑於以下幾點因素決定對多年遇到過的且能回憶起來的做個筆記。

1、在開發中每次遇到問題,死腦地想解決方案,最後終於解決了滿滿的成就感。不過下一次再遇到這個問題,不自覺地就再次踏進去這個坑,如何解決,記錄下來方便以後好閱讀。

2、為其他同樣遇到這種坑的開發者一個好的參考吧。

3、在面試的時候,考官最喜歡考的就是這些莫名其妙的坑了,也可以當作面試寶典看。

曾經遇過的坑:

1、修改導航欄顏色

這個問題對有經驗的開發者來說不是問題,但是當年筆者剛入行時,確實被這個問題折騰了好久。比如想設定導航欄的顏色為藍色

self.navigationController.navigationBar.backgroundColor = [UIColor blueColor];

執行,然後......????這特麼是藍色?筆者確定自己不是色盲 enter image description here

2、輸入中文時限制字元長度

限制字母、數字、符號等其他非中文字元的長度大家應該都知道咋整,但如果是中文輸入法,這就比較蛋疼了。舉個例子,限制長度為5,輸入“我愛寫程式碼”,當已經輸入“我愛寫”兩字,然後輸入“程式碼”時就會出現如下情況

enter image description here

根本寫不進去啊,這是為什麼呢?因為輸入的拼音也被計算在了字串長度之內,導致輸入“da”以後就不能繼續輸入了,可通過下面的辦法解決 enter image description here

3、手機錄音或通話時,app介面整體下移

當你的iphone在錄音或者通話時,開啟app你會發現,整個介面都下移了20畫素,這個問題對於scrollView、tableView等可以垂直滾動的檢視可能沒有太大影響,但是對於那些不能滾動的檢視,就有可能底部被遮蓋20畫素

筆者在網上查閱了資料,也試過多種方法,這個問題依然存在,最後筆者不得不使用大絕招來解決,何為大絕招?很簡單,位置尺寸寫死。專案中導航控制器是自定義的,在自定義的類中新增如下程式碼就OK了 enter image description here

4、點選導航欄下方也會觸發導航欄按鈕的點選事件

如圖所示,每次想選中右上角的圖片,結果總是觸發“取消”事件,明明沒有點到導航欄上面去,問題的原因不清楚,解決方法建立一個UINavigationBar的分類,重寫hitTest方法 enter image description here

5、介面莫名其妙下移

這個問題跟第一個的問題一樣,都是比較基礎的問題,有經驗的人都知道如何解決,但是筆者曾經也被折磨過

enter image description here

為什麼下面textView的內容不是從最上面開始的,而且還不能滾上去,當初真的被這種情況折騰的死去活來的,改frame,改約束,都沒效果。後來才知道,當有導航控制器時,系統會預設將第一個新增的scrollView或其子類檢視的內容下移64個畫素,下面的textView是先新增的,所以其內容被下移了,而上面的卻沒有,解決方法是在控制器里加上下面這句程式碼

self.automaticallyAdjustsScrollViewInsets = NO;

6、自定義相機照片擷取

這個問題說難不難,說簡單也不簡單,筆者當時確實花了很長一段時間才弄清楚,但是當問題解決後,感覺這特麼也不復雜啊,之前怎麼就沒整明白呢

enter image description here

問題是這樣的,在使用自定義相機拍完照後,需要對圖片的指定區域(藍色方框內的區域)進行擷取然後上傳,這裡存在兩個問題

拍攝時你所看到的區域,跟實際拍出來的區域是不一樣的 enter image description here

由於拍攝時所看到檢視寬高比與實際拍攝出來的圖片的寬高比並不一致,所以導致圖片經過等比例縮放到寬度一樣時,高度有一部分超出了我們的可視範圍,首先,我們要計算出超出部分的高度,超出部分的高度計算完後,我們就要來計算藍色方框(_circleView,_cameraView的子控制元件)的座標了,然後根據計算好的frame擷取圖片就ok了。

CGRect rect = CGRectMake(x, y, width,height);
CGImageRef tailorImageRef = CGImageCreateWithImageInRect(photo.CGImage, rect);
UIImage *tailorImage = [UIImage imageWithCGImage:tailorImageRef];

結束: 開發得越久,遇到的坑就越多,遠遠還不止這些,以後再補上吧!

相關文章