【Swift】iOS開發小坑歷險記(二)

yeyouer 8年前發布 | 38K 次閱讀 Swift IOS Apple Swift開發

前言

這個系列主要是一些開發中遇到的坑記錄分享,有助于初學者跨過這些坑,攢夠 7 條發一篇。 

1、用動畫更新約束沒有動畫效果?

    缺少 layoutIfNeeded ,事例:

        UIView.animateWithDuration(0.15, animations: { () -> Void in
            self.heightConstraint.constant = 100
            self.view.layoutIfNeeded()   // 這行不能少
        })

2、處理單擊和雙擊沖突

    singleTapRecognizer.requireGestureRecognizerToFail( doubleTapRecognizer )

    但是有一個問題,單擊響應會變慢,所以最好更改設計方案。

3、獲取 UILabel 的行數(不受 Lines 限制)

extension UILabel {

func lineCount() -> Int {
    if let text = self.text {
        let size = NSString(string: text).boundingRectWithSize(CGSizeMake(bounds.width, CGFloat.max), options: NSStringDrawingOptions.UsesLineFragmentOrigin, attributes: [NSFontAttributeName : self.font], context: nil)
        return Int(ceil(size.height / self.font.lineHeight))
    }

    return 0
}

}</code></pre>

4、自定義分享(分享到 非死book、推ter、Weibo)

    本來不打算寫,主要是搜索的時候沒有很快搜到相關結果

    func shareSocialAction(serviceType: String) {
        let vc = SLComposeViewController(forServiceType: serviceType)
        vc.setInitialText("歡迎來看直播")
        vc.addImage(UIImage(named: "cover"))
        vc.addURL(NSURL(string: "https://shou.tv/over140"))
        presentViewController(vc, animated: true, completion: nil)
    }

    傳入 SLServiceType推ter 就能分享到 推ter 了,查找一下定義就能看到分享到別,這里還有一個全的:OvershareKit

    注意:let vc = SLComposeViewController(forServiceType: serviceType) 可能會返回 nil ,需要加判斷處理(網上有說國行的 iPhone 可能屏蔽掉了)。我這里的處理辦法是走 推ter 和 非死book 的 SDK 發起分享。

5、IQKeyboardManager 禁止某個 UITextField 的工具欄

    針對 ViewController 級別禁用工具欄:IQKeyboardManager.sharedManager().disableToolbarInViewControllerClass ,如果這個 UITextField 直接 add 到 window 上的這個方法就不管用了,可以直接設置 inputAccessoryView = UIView() 即可。

6、AFNetworking 3.0 輸出 Log 

let networkLogger = AFNetworkActivityLogger.sharedLogger()
networkLogger.startLogging()
let console = AFNetworkActivityConsoleLogger()
console.level = AFHTTPRequestLoggerLevel.AFLoggerLevelDebug
networkLogger.addLogger(console)

7、AVCaptureDevice.requestAccessForMediaType 授權失敗彈 UIAlertView 需要放到 dispatch_async(dispatch_get_main_queue()) 主線上

AVCaptureDevice.requestAccessForMediaType(AVMediaTypeVideo, completionHandler: {[weak self](granted: Bool) in
   if granted {
      // 授權成功
   } else {
      // 授權失敗,彈一個 UIAlertView
      dispatch_async(dispatch_get_main_queue()) {
         //UIAlertView....
      }
   }
})

如果不增加  dispatch_async(dispatch_get_main_queue())  這個代碼,在部分設備上提示 UIAlertView 這行崩潰。

 

系列

        【Swift】iOS開發小坑歷險記(一)

來源:農民伯伯

 本文由用戶 yeyouer 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!