【Swift】iOS開發小坑歷險記(二)
前言
這個系列主要是一些開發中遇到的坑記錄分享,有助于初學者跨過這些坑,攢夠 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 這行崩潰。
系列
來源:農民伯伯
本文由用戶 yeyouer 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!