ios开发问题汇总(一)
生活随笔
收集整理的這篇文章主要介紹了
ios开发问题汇总(一)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
教程匯總
- IOS比較好的網絡教程:IOS編程淺藍教程
- IOS編程教程(五)自定義UITableView的表單元格
- 菜鳥教程-iOS教程
開發問題
- 實現頁面切換,網上某些文章寫的是:
這么寫的話,軟件運行時會報錯:
‘Receiver (<UINavigationController: 0x7f8e2781f400>) has no segue with identifier ‘ShowDetail’’
解決辦法是:
[self performSegueWithIdentifier:@"ShowDetail" sender:self];也就是說應該用轉場segue的源頁面的控制器self來作為函數調用(oc中叫通知)對象。
找了兩天終于找到這個問題的答案:https://stackoverflow.com/questions/20715462/receiver-viewcontroller-has-no-segue-with-identifier-addsegue,百度啥也搜不到啊,都是你抄我我抄你,難。
- OC語言不支持類靜態變量,但是支持類靜態屬性,如
和類靜態變量作用一樣。
- 添加constraint后不顯示,可能是高度未設置,值不能全為相對值。有時設置高度也沒用,必須要有內容才能顯示,和css類似。
- SafeArea是什么:iOS 11 safeArea詳解 & iphoneX 適配。SafeArea下的content view的高度是隨著內容改變的,所以在添加高度的constraint時,一般相對于SafeArea才能進行有效的高度設置。
- UIScrollView的FrameLayout和ContentLayout:iOS 11 適配工作
- iOS中的顏色:ios開發常用RGB色值
- 如何設置UILabel的內邊距?
- Storyboard中,TabBarNavigator文字不更新,第一種解決方法是重新連線,第二種解決方法是取消本地化翻譯,然后再次加載本地化翻譯,在彈出的確認框中選擇 “替換”。
- 使用Prototype Cell 自定義表視圖
- UIPickerView自定義選中的字體顏色、字號、字體
- NSMutableAttributedString使用介紹
- UIButton 基礎
- iOS UITableView動態隱藏或顯示Item
- NSArray存結構體,可以參考:結構體存儲在NSArray中的方式,不過需要注意,這樣存的話,結構體必須為POD即基本數據類型。如果結構體中包含對象指針,則對象不會被正確釋放。
- StoryBoard界面文字不更新,是由本地化文件導致的,保持Localization中Base不變,先取消勾選本地化語言,如English,Chinese等,再勾選,彈出的對話框中選擇Replace File,即可更新翻譯文件,解決界面文件不更新的問題。
- iOS之枚舉用法
- iOS-代碼加載storyboard中的ViewController
- 從url中獲取文件名以及后綴
子控制器 addChildViewController
- addChildViewController時子控制器中的UI顯示問題
- iOS筆記 addChildViewController
- iOS addChildViewController方法
- 以上文章都不靠譜,addChildViewController要和removeFromParentViewController成對調用,還要addSubView
- 報錯:unbalanced calls to begin/end appearance transitions for uiviewcontroller的解決方法,這個方法不怎么管用。也可以動畫開始前關閉交互,動畫結束后開啟交互。對我來說也不管用。去掉removeFromSuperView就好了。
- transitionFromViewController方法沒有動畫的問題:transitionFromViewController方法的使用,按照這篇文章做,只需要在初始化時把所有的子ViewController通過調用addChildViewController加入到父ViewController,其他地方都不需要調用addChildViewController,也不需要removeFromParentViewController。addSubView也只是初始化時調用一次即可,不需要在其他地方調用。options參數只有填UIViewAnimationOptionTransitionXXX才有動畫,這個才是動畫類型,而UIViewAnimationOptionCurveEaseOut是動畫方式。
遮罩mask,CALayer,貝塞爾路徑
iOS 利用CAShapeLayer的FillRule屬性生成一個空心遮罩的layer。要理解兩種填充方式的區別。
對話框
- ios-如何在UIAlertController中隱藏標題/消息框架?
導航
- iOS開發之導航欄各種右滑返回失效的解決方法匯總
- Segue導航與傳值,官方文檔:Customizing the Behavior of Segue-Based Presentations
- 關于Unwind Segue實現任意動態跳轉,官方文檔:Dismissing a View Controller with an Unwind Segue
- 右滑返回很神奇,多次啟動右滑又取消,會多次觸發popViewControllerAnimated和willShowViewController,但是取消右滑又不會觸發任何函數。
界面
界面問題
- 關于UIButton嵌入到UIView點擊無反應問題的解決方法和delegate的簡單用法示例。在storyboard中畫的大小在運行時就不是那么大了,需要通過約束來顯式指定其位置和大小。
- 關于等寬字體。以前不知道等寬字體有什么用,直到我想在軟件中顯示計時時間,如果不用等寬字體,時間數值文字會不斷跳動,不是我想要的效果。這個時候就需要等寬字體來顯示數字。可以參考文章:IOS 上支持的等寬字體。但是ios自己用的等寬字體是:[UIFont monospacedDigitSystemFontOfSize:35 weight:UIFontWeightSemibold]。
- 圓角按鈕:iOS 部分圓角的正確實現,在此基礎上稍加修改即可。
- iOS攔截導航欄返回按鈕事件的正確方式(二),此方法有問題,見:iOS 13 and UINavigationBarDelegate::shouldPop()。即(BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPopItem:(UINavigationItem *)item無論在模擬器還是在手機設備上都不調用。解決辦法是重設delegate:self.navigationController.navigationBar.delegate = self;不要采用catagory的方式實現,直接實現UINavgationController子類,并在Storyboard中設置導航控制器的類名即可。
- UINavigationController與UINavigationBar詳解
- UITextField無法使用第三方鍵盤的問題。是因為設置了secureTextEntry為True的輸入框,會使其前一個輸入框也無法使用第三方輸入框。百度啥也搜不到,見:Native UITextField Secure Text Entry forces English (US) keyboard,用谷歌搜。
界面元素
- iOS 人機界面指南精簡版筆記之界面元素:Bars
- 高版本ios底部有一個橫條,SafeArea不包含這個橫條,如果UITableView的高度和SafeArea相同,那么屏幕底部就會有一塊灰色區域。這個灰色區域不是什么控件,只要把UITableView的高度設置到和SuperView一樣高就可以消除這塊灰色的,遮擋UITableView的區域的了。
- UINavgationController包含是控制導航的。它包含的界面包括:app界面的導航欄和工具欄,并負責處理導航欄和工具欄的業務邏輯。夾在導航欄和工具欄中間的部分是我們的UIViewController業務子類,腦海里要有這個結構。
- UINavigationItem:這個類封裝了UINavigationBar里面的所有元素,每個UIViewController對應一個navigationItem,可以使用self.naviigationItem訪問。
對象間通信
信號槽
[Objective-C] selector 簡介
本地通知
- removeObserver的正確使用姿勢
自動布局
- 問題:LayoutConstraints] Unable to simultaneously satisfy constraints,約束沖突,參考:translatesAutoresizingMaskIntoConstraints 詳解,即對約束的View,設置translatesAutoresizingMaskIntoConstraints = NO,禁用AutoResizing布局,防止沖突。
- 約束沖突時最常見的問題,例如設置了View上下距離為0來實現居中,但是因為View高度不夠,這時候視圖View就會靠上顯示,這時候如果想要居中,就必須刪除上下限制,改用NSLayoutAttributeCenterY中心點對齊。
- 左右同時設置內邊距和設置寬度會沖突。
指針
- 對象指針不需要初始化,默認為nil,注意是ARC下的對象指針。
本地通知
- iOS 10前后兩種本地通知
遠程通知
UITableView
- UITableView全面解析
- UITableView被導航欄遮擋的解決辦法,如果是系統生成的NavigationController帶的TableViewController,會出現這樣的問題。個人建議刪除這個系統創建的TableViewController,自新建一個普通的ViewController,它的SafeArea不包含導航條,在里面放一個TableView即可,這樣不光可以放TableView,還可以放其他控件,一舉兩得。
- 如何在使用storyboard中使用tableViewController中的Prototype Cells 自定義cell,本以為不需要新建類就可以處理,其實最終還是避免不了要新建單元格類。Prototype Cells只是自定義的單元格的Ui界面而已,并不會自動實例化,需要在cellForRowAtIndexPath回調中,通過dequeueReusableCellWithIdentifier:@"單元格identifier"來創建。
- iOS: 在UIViewController 中添加Static UITableView,Static Table Cell。
- iOS 9 Storyboard 教程(二上)介紹Segue靜態單元格(static cell),個人喜歡使用動態單元格,更靈活。
- 關于tableView的reloadRowsAtIndexPaths,可以了解到cell重用的機制。
- UITableView 在UITableViewStylePlain模型下,取消headerView的黏結性,不浮動
- UITableView在style為plain時,實現sectionHeader跟隨cell移動
- iOS UITableView 實現去除Section的分割線,保留Cell的分割線
- UITableviewFooter上拉顯示不全的問題,我沒有用文中的做法,而是添加約束:table.bottom = SuperView.bottom
- iOS UITableView section圓角陰影
- 解決UITableViewStylePlain方式headerView頂端 滯留的代碼
- iOS UITableView獲取特定位置的cell
- 將UITableViewCell設置為圓角,困擾了我很久,一句代碼就可以搞定:
cell.layer.cornerRadius = 10
界面美化
- iOS 統一定制導航欄的 appearance 方法
動畫
- CABasicAnimation.beginTime:是絕對時間,應該用CACurrentMediaTime()+n,否則設置無效。
IOS應用本地化/國際化
- iOS應用本地化
- IOS本地化
- Localization native development region 更改語言無效
多媒體
系統提示音
- iOS系統提示音的使用
這個問題,搞了一天,能踩的坑都被我踩了。。方法和代碼參考上面的鏈接。
在模擬器中使用上面的方法是獲取不到系統提示音列表的。通過代碼枚舉目錄,在iOS模擬器中運行,進入到路徑/System/Library/Audio/UISounds/下,發現什么都沒有。這導致我認為這個方法太老了不能用,差點放棄。在互聯網上搜了很久,只有這個方法。而且在倉庫https://github.com/TUNER88/iOSSystemSoundsLibrary的issue列表中,看到有人說高版本iOS也可以用(我用的是iOS14.5)。又繼續嘗試這個方法。經過不斷枚舉,發現iOS模擬器中的目錄完全就是mac電腦的目錄啊!于是換成在真機上測試(iphone11)。
在我自己的手機上,逐個目錄枚舉,發現只能枚舉到根目錄下的內容,子目錄,比如/System下的內容就枚舉不出來了。一籌莫展時,將路徑直接改為/System/Library/Audio/UISounds/,列表竟然出來了。也就是說雖然上級目錄無法枚舉,但是指定目錄還是可以枚舉的! - iOS錄音后播放聲音變小的解決方法
- iOS音頻Error
- 項目中需要錄音,但是在錄音開始和結束時,播放1113和1114系統提示音,結果出現提示音播放聲音變小的問題。上面給出的兩篇文章雖然給出了相關代碼,但是并沒有完全解決我的問題。最后在多次嘗試下得出最終的解決方案,即一定要保證代碼順序,先開啟錄制,再設置音頻會話參數,最后再播放系統提示音!順序錯了的話,設置音頻會話參數無效。
- 先錄音再播放時出現問題,沒有聲音。錄音文件5kb,但是播放時沒有聲音,以為是播放問題。參考AVAudioPlayer播放音頻文件時沒聲音。后面通過打印音頻文件時長得知,音頻文件還不到0.1秒。那么肯定是錄制的問題了。經過修改代碼,audio session的設置一定要在record之前,否則錄音會失敗!
文件系統
- fileURLWithPath,不要用relativeToURL,否則不會帶有file:///前綴,導致某些函數報錯無法識別。
- iOS fileExistsAtPath:函數返回結果錯誤
- 用NSFileManager的fileExistsAtPath檢查file:///前綴的文件路徑指向的文件是否存在,會返回失敗。要使用NSURL的checkResourceIsReachableAndReturnError函數來檢查。
- pathForResource返回nil,以及UIWebView本地加載html、css/js,文件名和后綴名分開寫,例如加載1.html:NSString *filePath = [[NSBundle mainBundle] pathForResource:@"1" ofType:@"html"];
多線程
- dispatch_async多線程通信
系統功能調用
- iOS應用內跳轉到系統設置頁面
數據庫
- iOS中的數據庫—使用FMDB
代碼相關
- iOS 注釋方法大全 代碼塊加快捷鍵注釋
- iOS 創建代碼塊
總結
以上是生活随笔為你收集整理的ios开发问题汇总(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 华为、长安汽车和宁德时代合体!阿维塔11
- 下一篇: sap 订单状态修改时间_SAP中对于获