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