1. 程式人生 > >【iOS - 周總結】開發中遇到的小知識點(2018.12.24-2018.12.29)

【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)
}