91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

iOS 13適配匯總(推薦)

發布時間:2020-09-04 13:03:38 來源:腳本之家 閱讀:190 作者:仰望星空01 欄目:移動開發

隨著iPhone 11的發布,iOS 13適配也提上了日程,接下來就開發中升級iOS13的手機可能出現的問題

Xcode: 11.0
iOS : 13.0

UIViewController 模態彈出界面

viewController.present(presentVC, animated: true, completion: nil)

在調用模態彈出視圖,會發現彈出的界面沒有全屏。如圖

iOS 13適配匯總(推薦)

通過多次的嘗試,發現在低版本里面不會發生這種情況(iOS12及以下),于是我查閱了最新的開發文檔,發現了端倪,主要還是因為我們之前忽略了UIViewController里面的一個屬性,即: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 新增一個:automatic類型,默認情況下就是這個所以才會彈出不是全屏的界面。如果我們想要修改為全屏的話

可以:presentVC.modalPresentationStyle = .fullScreen設置為全屏即可

KVC 限制

iOS13以后已經不能肆無忌憚的通過 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"]

下面方法替換

///分別設置字體大小和顏色(富文本)
textField.attributedPlaceholder = NSAttributedString.init(string: "請輸入....", attributes: [NSAttributedString.Key.foregroundColor: UIColor.red], [NSAttributedString.Key.font: UIFont.systemFont(ofSize: 15)])

 /// UISearchBar 用 searchField代替
bar.value(forKey: "searchField") as! UITextField

UISegmentedControl 默認樣式改變

默認樣式變為白底黑字,如果設置修改過顏色的話,頁面需要修改

UITabbar

如果之前有通過TabBar上圖片位置來設置紅點位置,在iOS13上會發現顯示位置都在最左邊去了。遍歷UITabBarButton的subViews發現只有在TabBar選中狀態下才能取到UITabBarSwappableImageView,解決辦法是修改為通過UITabBarButton的位置來設置紅點的frame

App啟動過程中,部分View可能無法實時獲取到frame

// 只有等執行完 UIViewController 的 viewDidAppear 方法以后,才能獲取到正確的值,在viewDidLoad等地方 frame Size 為 0,例如:
 UIApplication.shared.statusBarFrame

廢棄UIWebView

查看API可以看到:iOS 2.0 到 iOS 11.0
在12.0就已經被廢棄,部分APP使用webview時, 審核被拒

@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 相關使用變更
最近收到了蘋果的郵件,說獲取WiFi SSID的接口CNCopyCurrentNetworkInfo 不再返回SSID的值。不仔細看還真會被嚇一跳,對物聯網的相關APP簡直是炸彈。仔細看郵件還好說明了可以先獲取用戶位置權限才能返回SSID。
注意:目本身已經打開位置權限,則可以直接獲取

- (NSString*) getWifiSsid {
  if (@available(iOS 13.0, *)) {
    //用戶明確拒絕,可以彈窗提示用戶到設置中手動打開權限
    if ([CLLocationManager authorizationStatus] == kCLAuthorizationStatusDenied) {
      NSLog(@"User has explicitly denied authorization for this application, or location services are disabled in Settings.");
      //使用下面接口可以打開當前應用的設置頁面
      //[[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
      return nil;
    }
    CLLocationManager* cllocation = [[CLLocationManager alloc] init];
    if(![CLLocationManager locationServicesEnabled] || [CLLocationManager authorizationStatus] == kCLAuthorizationStatusNotDetermined){
      //彈框提示用戶是否開啟位置權限
      [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>;
}

持續更新中…

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

深水埗区| 饶阳县| 德格县| 巩留县| 阳春市| 苗栗县| 黔东| 瓦房店市| 定结县| 汤阴县| 九龙县| 师宗县| 吐鲁番市| 南郑县| 景东| 海阳市| 和林格尔县| 靖宇县| 鞍山市| 西畴县| 商都县| 紫阳县| 沾化县| 台北市| 临清市| 泽库县| 德安县| 昌都县| 广宗县| 苍山县| 巫山县| 张家口市| 上蔡县| 竹溪县| 宣恩县| 犍为县| 渭源县| 琼结县| 蓝山县| 奉新县| 绥中县|