【iOS - 周總結】開發中遇到的小知識點(2018.12.24-2018.12.29)
1.float和double的精度問題。
在開發中我遇到一個問題就是四位或者五位小數的字串轉換成float後相加,在轉換成字串,數值不正確。我開始以為是後臺返回資料的問題,打印出來發現不是。只能想到是精度的問題。這時候我就轉換成double型別,發現結果就不會出錯了。
2.iOS自建證書不被蘋果認可,webview載入報錯。
在測試中發現一個問題,一個連結https在wkwebview中打不開。在瀏覽器中能開啟,後來發現是webview的代理中報錯。顯示Error Domain=NSURLErrorDomain Code=-1202,Https伺服器證書無效,
NSURLErrorDomain Code=-1202"The certificate for this server is invalid. You might be connecting to a server that is pretending to be “https:jkjlkjlkjljlj” which could put your confidential information at risk."
錯誤資訊的大致翻譯就是
錯誤:“此伺服器的證書無效。您可能正在連線到一個偽裝成“www.xxxxxx.com”的伺服器, 這會威脅到您的機密資訊的安全
網上一查發現也有很多這樣的問題,但是大多都是直接從網路層開始的。直接設定各種代理。
參考連結如下: //這兩個直接呼叫私有API,不推薦,會造成稽核被拒 連結一:https://www.jianshu.com/p/d97b1786216f 連結二:https://www.cocoanetics.com/2009/11/ignoring-certificate-errors-on-nsurlrequest/ 下面幾個我未試驗(一是因為有的時間很早好幾年了,二是因為大多是直接設定網路層,而我的情況只是這個webiview載入不出來,不需要通篇設定) 連結三:https://www.jianshu.com/p/3105e0843c6b 連結四:http://www.qingpingshan.com/rjbc/ios/181533.html連結五:https://blog.csdn.net/qq_32531823/article/details/50730745
上面也說了,我只是webview載入不出來,網路請求不報錯。解決方法如下:
// 在webview的代理中設定一下 // oc - (void)webView:(WKWebView *)webView didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential * _Nullable credential))completionHandler{ if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]) { NSURLCredential *card = [[NSURLCredential alloc]initWithTrust:challenge.protectionSpace.serverTrust]; completionHandler(NSURLSessionAuthChallengeUseCredential,card); } } // swift func webView(_ webView: WKWebView, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) { if challenge.protectionSpace.authenticationMethod == NSURLAuthenticationMethodServerTrust { let card = URLCredential.init(trust: challenge.protectionSpace.serverTrust!) completionHandler(URLSession.AuthChallengeDisposition.useCredential,card) } }
3.tableviewcell上的按鈕能顯示,但是點選無效果,而代理方法去有效果
這時候就要看看圖層,看看按鈕的位置對不對
我就是這樣,先看了看沒有遮蓋,感覺正確,然後就像網上說的把加在cell上的檢視加在cell的contenview上 還是不行
後來看了看圖層 把這個按鈕加在backview上,但是這個按鈕的位置超出了backview。
而我的cell設定偏大 雖然是顯示出了按鈕 但是按鈕卻不在backview上 所以不能點選
這時候就改下backview或者把按鈕加在cell上就可以了
4.tabbar設定圖片問題
在不設定圖片的imageedge的情況下有時候會出現圖片大小有偏差的情況。有時候也會出現點選圖片後視覺感覺圖片發生偏差的情況,還有可能在使用第三方和系統tabbar混用是出現大小不一致的情況
這時候很大的可能是圖片的問題。
我的解決方法 設定2倍48*48 3倍72*72 這時候設定就差不多了
具體原因未知
5.self.title和self.navigationItem.title
今天遇到一個很傻的問題。我設定self.title後發現導航欄和tabbar都會改變。然後我就開始納悶。
仔細一想才發現self.title是都會改變的。而self.navigationItem.title只會改變導航欄。self.navigationController.title 設定無效
6.最近在用swift寫demo。把它延時處理的方法寫出
// 第一種 DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 1.5) { self.categoryCollectionView.endRefreshing(isSuccess: true) } // 第二種 perform(#selector(endRefreshing), with: self, afterDelay: 1.5) @objc func endRefreshing() { self.rankCollectionView.endLoadMore(isNoMoreData: false) }