iOS 13適配匯總(推薦)
隨著iPhone 11的發(fā)布,iOS 13適配也提上了日程,接下來就開發(fā)中升級(jí)iOS13的手機(jī)可能出現(xiàn)的問題
Xcode: 11.0
iOS : 13.0
UIViewController 模態(tài)彈出界面
viewController.present(presentVC, animated: true, completion: nil)
在調(diào)用模態(tài)彈出視圖,會(huì)發(fā)現(xiàn)彈出的界面沒有全屏。如圖
通過多次的嘗試,發(fā)現(xiàn)在低版本里面不會(huì)發(fā)生這種情況(iOS12及以下),于是我查閱了最新的開發(fā)文檔,發(fā)現(xiàn)了端倪,主要還是因?yàn)槲覀冎昂雎粤?strong>UIViewController里面的一個(gè)屬性,即:modalPresentationStyle
Defines the presentation style that will be used for this view controller when it is presented modally. Set this property on the view controller to be presented, not the presenter. If this property has been set to UIModalPresentationAutomatic, reading it will always return a concrete presentation style. By default UIViewController resolves UIModalPresentationAutomatic to UIModalPresentationPageSheet, but other system-provided view controllers may resolve UIModalPresentationAutomatic to other concrete presentation styles. Defaults to UIModalPresentationAutomatic on iOS starting in iOS 13.0, and UIModalPresentationFullScreen on previous versions. Defaults to UIModalPresentationFullScreen on all other platforms. public enum UIModalPresentationStyle : Int { case fullScreen @available(iOS 3.2, *) case pageSheet @available(iOS 3.2, *) case formSheet @available(iOS 3.2, *) case currentContext @available(iOS 7.0, *) case custom @available(iOS 8.0, *) case overFullScreen @available(iOS 8.0, *) case overCurrentContext @available(iOS 8.0, *) case popover @available(iOS 7.0, *) case none @available(iOS 13.0, *) case automatic }
通過查看API 可以看到,iOS 13 新增一個(gè):automatic類型,默認(rèn)情況下就是這個(gè)所以才會(huì)彈出不是全屏的界面。如果我們想要修改為全屏的話
可以:presentVC.modalPresentationStyle = .fullScreen設(shè)置為全屏即可
KVC 限制
iOS13以后已經(jīng)不能肆無忌憚的通過 KVC來修改一些沒有暴露出來的屬性了。
*** Terminating app due to uncaught exception 'NSGenericException', reason: 'Access to xxx's _xxx ivar is prohibited. This is an application bug'
我們常用的有
// UITextField 的 _placeholderLabel let textField = UITextField.init() textField.setValue(UIColor.red, forKey: "_placeholderLabel.textColor") /// UISearchBar 的 _searchField [searchBar valueForKey:@"_searchField"]
下面方法替換
///分別設(shè)置字體大小和顏色(富文本) textField.attributedPlaceholder = NSAttributedString.init(string: "請(qǐng)輸入....", attributes: [NSAttributedString.Key.foregroundColor: UIColor.red], [NSAttributedString.Key.font: UIFont.systemFont(ofSize: 15)]) /// UISearchBar 用 searchField代替 bar.value(forKey: "searchField") as! UITextField
UISegmentedControl 默認(rèn)樣式改變
默認(rèn)樣式變?yōu)榘椎缀谧?,如果設(shè)置修改過顏色的話,頁(yè)面需要修改
UITabbar
如果之前有通過TabBar上圖片位置來設(shè)置紅點(diǎn)位置,在iOS13上會(huì)發(fā)現(xiàn)顯示位置都在最左邊去了。遍歷UITabBarButton的subViews發(fā)現(xiàn)只有在TabBar選中狀態(tài)下才能取到UITabBarSwappableImageView,解決辦法是修改為通過UITabBarButton的位置來設(shè)置紅點(diǎn)的frame
App啟動(dòng)過程中,部分View可能無法實(shí)時(shí)獲取到frame
// 只有等執(zhí)行完 UIViewController 的 viewDidAppear 方法以后,才能獲取到正確的值,在viewDidLoad等地方 frame Size 為 0,例如: UIApplication.shared.statusBarFrame
廢棄UIWebView
查看API可以看到:iOS 2.0 到 iOS 11.0
在12.0就已經(jīng)被廢棄,部分APP使用webview時(shí), 審核被拒
@available(iOS, introduced: 2.0, deprecated: 12.0, message: "No longer supported; please adopt WKWebView.") open class UIWebView : UIView, NSCoding, UIScrollViewDelegate { ......... ......... ......... }
CNCopyCurrentNetworkInfo
iOS13 以后只有開啟了 Access WiFi Information capability,才能獲取到 SSID 和 BSSID wi-fi or wlan 相關(guān)使用變更
最近收到了蘋果的郵件,說獲取WiFi SSID的接口CNCopyCurrentNetworkInfo 不再返回SSID的值。不仔細(xì)看還真會(huì)被嚇一跳,對(duì)物聯(lián)網(wǎng)的相關(guān)APP簡(jiǎn)直是炸彈。仔細(xì)看郵件還好說明了可以先獲取用戶位置權(quán)限才能返回SSID。
注意:目本身已經(jīng)打開位置權(quán)限,則可以直接獲取
- (NSString*) getWifiSsid { if (@available(iOS 13.0, *)) { //用戶明確拒絕,可以彈窗提示用戶到設(shè)置中手動(dòng)打開權(quán)限 if ([CLLocationManager authorizationStatus] == kCLAuthorizationStatusDenied) { NSLog(@"User has explicitly denied authorization for this application, or location services are disabled in Settings."); //使用下面接口可以打開當(dāng)前應(yīng)用的設(shè)置頁(yè)面 //[[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]]; return nil; } CLLocationManager* cllocation = [[CLLocationManager alloc] init]; if(![CLLocationManager locationServicesEnabled] || [CLLocationManager authorizationStatus] == kCLAuthorizationStatusNotDetermined){ //彈框提示用戶是否開啟位置權(quán)限 [cllocation requestWhenInUseAuthorization]; usleep(50); //遞歸等待用戶選選擇 return [self getWifiSsidWithCallback:callback]; } } NSString *wifiName = nil; CFArrayRef wifiInterfaces = CNCopySupportedInterfaces(); if (!wifiInterfaces) { return nil; } NSArray *interfaces = (__bridge NSArray *)wifiInterfaces; for (NSString *interfaceName in interfaces) { CFDictionaryRef dictRef = CNCopyCurrentNetworkInfo((__bridge CFStringRef)(interfaceName)); if (dictRef) { NSDictionary *networkInfo = (__bridge NSDictionary *)dictRef; NSLog(@"network info -> %@", networkInfo); wifiName = [networkInfo objectForKey:(__bridge NSString *)kCNNetworkInfoKeySSID]; CFRelease(dictRef); } } CFRelease(wifiInterfaces); return wifiName; }
同意打印:如下
network info -> { BSSID = "44:dd:fb:43:91:ff"; SSID = "Asus_c039"; SSIDDATA = <41737573 5f633033 39>; } 不同意 network info -> { BSSID = "00:00:00:00:00:00"; SSID = WLAN; SSIDDATA = <574c414e>; }
持續(xù)更新中…
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持我們。
上一篇:詳解iOS中跨頁(yè)面狀態(tài)同步方案比較
欄 目:IOS
本文標(biāo)題:iOS 13適配匯總(推薦)
本文地址:http://mengdiqiu.com.cn/a1/IOS/11869.html
您可能感興趣的文章
- 01-11iOS常用算法之兩個(gè)有序數(shù)組合并(要求時(shí)間復(fù)雜度為0(n))
- 01-11iOS 彈幕功能的實(shí)現(xiàn)思路圖解
- 01-11iOS調(diào)試Block引用對(duì)象無法被釋放的小技巧分享
- 01-11iOS動(dòng)態(tài)更換Icon的全過程記錄
- 01-11iOS實(shí)現(xiàn)文本分頁(yè)的方法示例
- 01-11iOS常見宏理解及使用方法
- 01-11iOs遷至WKWebView跨過的一些坑
- 01-11iOS模擬中獎(jiǎng)名單循環(huán)滾動(dòng)效果
- 01-11Python一鍵查找iOS項(xiàng)目中未使用的圖片、音頻、視頻資源
- 01-11iOS中如何獲取某個(gè)視圖的截圖詳析


閱讀排行
- 1C語(yǔ)言 while語(yǔ)句的用法詳解
- 2java 實(shí)現(xiàn)簡(jiǎn)單圣誕樹的示例代碼(圣誕
- 3利用C語(yǔ)言實(shí)現(xiàn)“百馬百擔(dān)”問題方法
- 4C語(yǔ)言中計(jì)算正弦的相關(guān)函數(shù)總結(jié)
- 5c語(yǔ)言計(jì)算三角形面積代碼
- 6什么是 WSH(腳本宿主)的詳細(xì)解釋
- 7C++ 中隨機(jī)函數(shù)random函數(shù)的使用方法
- 8正則表達(dá)式匹配各種特殊字符
- 9C語(yǔ)言十進(jìn)制轉(zhuǎn)二進(jìn)制代碼實(shí)例
- 10C語(yǔ)言查找數(shù)組里數(shù)字重復(fù)次數(shù)的方法
本欄相關(guān)
- 01-11UILabel顯示定時(shí)器文本跳動(dòng)問題的解決
- 01-11iOS常用算法之兩個(gè)有序數(shù)組合并(要
- 01-11iOS 彈幕功能的實(shí)現(xiàn)思路圖解
- 01-11詳解MacOs免密登錄CentOs操作步驟
- 01-11iOS動(dòng)態(tài)更換Icon的全過程記錄
- 01-11iOS調(diào)試Block引用對(duì)象無法被釋放的小技
- 01-11iOS常見宏理解及使用方法
- 01-11iOS實(shí)現(xiàn)文本分頁(yè)的方法示例
- 01-11iOs遷至WKWebView跨過的一些坑
- 01-11iOS模擬中獎(jiǎng)名單循環(huán)滾動(dòng)效果
隨機(jī)閱讀
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 08-05dedecms(織夢(mèng))副欄目數(shù)量限制代碼修改
- 08-05DEDE織夢(mèng)data目錄下的sessions文件夾有什
- 08-05織夢(mèng)dedecms什么時(shí)候用欄目交叉功能?
- 01-11ajax實(shí)現(xiàn)頁(yè)面的局部加載
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 01-10C#中split用法實(shí)例總結(jié)
- 04-02jquery與jsp,用jquery
- 01-10delphi制作wav文件的方法
- 01-10使用C語(yǔ)言求解撲克牌的順子及n個(gè)骰子