[程序員日記]iOS 開(kāi)發(fā)中遇到的問(wèn)題(客戶端篇)

在項(xiàng)目開(kāi)發(fā)中荸镊,自己遇到一些問(wèn)題及解決方法,不斷更新中堪置。

(1)UINavigationBarUITabBar上有一條橫線躬存,是ShadowImage,默認(rèn)是黑色的舀锨。在項(xiàng)目開(kāi)發(fā)中岭洲,可以改變其圖片和顏色。在下圖個(gè)人熱點(diǎn)圖中可以看到導(dǎo)航欄下面的黑線坎匿。

[self.navigationController.navigationBar  setShadowImage:[UIImage imageWithColor:MyColor]];

(2) statusBar默認(rèn)的高度是20.0f盾剩,在使用微信或者QQ通話雷激,熱點(diǎn)等功能進(jìn)入后臺(tái)時(shí),statusBar的高度會(huì)變?yōu)?0.0f告私,下方的布局也會(huì)發(fā)生變化屎暇,在此要根據(jù)statusBar的變化調(diào)整布局,設(shè)置監(jiān)聽(tīng)監(jiān)聽(tīng)其變化驻粟。

打開(kāi)熱點(diǎn)時(shí)`statusBar`高度變化

監(jiān)聽(tīng)對(duì)象為UIApplicationDidChangeStatusBarFrameNotification

[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(statusBarFrameWillChange:) name:UIApplicationDidChangeStatusBarFrameNotification object:nil];//添加監(jiān)聽(tīng)

[[NSNotificationCenter defaultCenter]removeObserver:self name:UIApplicationDidChangeStatusBarFrameNotification object:nil];//移除監(jiān)聽(tīng)

當(dāng)前statusBar的高度也是可以獲取的:

NSValue *rectValue = [notification.userInfo objectForKey:UIApplicationStatusBarFrameUserInfoKey];
CGRect statusRect = [rectValue CGRectValue];
CGRect statusFrame = [self.view convertRect:statusRect fromView:[[UIApplication sharedApplication]keyWindow]];
CGFloat statusHeight = statusFrame.size.height;

(3)在iPad開(kāi)發(fā)時(shí)根悼,使用iOS 9系統(tǒng)會(huì)出現(xiàn)tableviewCell的位置變化,在開(kāi)發(fā)中默認(rèn)與右側(cè)是15個(gè)像素格嗅,可是現(xiàn)在明顯大的多番挺,這是因?yàn)樵趇OS 9后tableview的一個(gè)屬性發(fā)生了變化。

tableviewCell位置變化

需要調(diào)整

tableView.cellLayoutMarginsFollowReadableWidth = NO;

補(bǔ)充屯掖,因?yàn)榉椒ㄊ莍OS9之后出現(xiàn)的玄柏,因此在調(diào)用時(shí)需要判斷系統(tǒng)是否大于9.0

if([UIDevice currentDevice].systemVersion.floatValue >= 9.0){
    tableView.cellLayoutMarginsFollowReadableWidth = NO;
}

(4)在做直播功能模塊,使用到 彈幕 的功能(彈幕使用第三方庫(kù)BarrageRenderer)贴铜,彈幕為橫屏自動(dòng)開(kāi)啟粪摘,豎屏?xí)r關(guān)閉。在測(cè)試用發(fā)現(xiàn)彈幕有時(shí)開(kāi)有時(shí)關(guān)绍坝,最終發(fā)現(xiàn)在屏幕橫放時(shí)無(wú)法顯示徘意。原因是設(shè)置方法出現(xiàn)錯(cuò)誤。

通過(guò)[UIDevice currentDevice].orientation 的狀態(tài)判斷橫豎屏?xí)霈F(xiàn)錯(cuò)誤轩褐,因?yàn)槠涿杜e類型是UIDeviceOrientation椎咧,在查看其枚舉類型時(shí)會(huì)發(fā)現(xiàn)其除了Portrait LandscapeLeft LandscapeRight PortraitUpsideDown外還有FaceUp FaceDown兩個(gè)狀態(tài),忽略對(duì)其的設(shè)置會(huì)產(chǎn)生影響把介。

UIDeviceOrientation 枚舉

typedef NS_ENUM(NSInteger, UIDeviceOrientation) {
    UIDeviceOrientationUnknown,
    UIDeviceOrientationPortrait,            // Device oriented vertically, home button on the bottom
    UIDeviceOrientationPortraitUpsideDown,  // Device oriented vertically, home button on the top
    UIDeviceOrientationLandscapeLeft,       // Device oriented horizontally, home button on the right
    UIDeviceOrientationLandscapeRight,      // Device oriented horizontally, home button on the left
    UIDeviceOrientationFaceUp,              // Device oriented flat, face up
    UIDeviceOrientationFaceDown             // Device oriented flat, face down
} __TVOS_PROHIBITED;

在對(duì)其使用時(shí)還可以將其轉(zhuǎn)換成UIInterfaceOrientation勤讽,因?yàn)楹笳咧挥谐R?jiàn)的幾種類型。

UIDeviceOrientation orientation             = [UIDevice currentDevice].orientation;
UIInterfaceOrientation interfaceOrientation = (UIInterfaceOrientation)orientation;

UIInterfaceOrientation枚舉

typedef NS_ENUM(NSInteger, UIInterfaceOrientation) {
    UIInterfaceOrientationUnknown            = UIDeviceOrientationUnknown,
    UIInterfaceOrientationPortrait           = UIDeviceOrientationPortrait,
    UIInterfaceOrientationPortraitUpsideDown = UIDeviceOrientationPortraitUpsideDown,
    UIInterfaceOrientationLandscapeLeft      = UIDeviceOrientationLandscapeRight,
    UIInterfaceOrientationLandscapeRight     = UIDeviceOrientationLandscapeLeft
} __TVOS_PROHIBITED;

另外在橫豎屏切換時(shí)我們會(huì)對(duì)屏幕的狀態(tài)做監(jiān)聽(tīng)拗踢,通常監(jiān)聽(tīng)的是UIDeviceOrientationDidChangeNotification,監(jiān)聽(tīng)得到的結(jié)果是UIDeviceOrientation脚牍,也可以監(jiān)聽(tīng)UIApplicationDidChangeStatusBarFrameNotification,得到UIInterfaceOrientation巢墅。當(dāng)然UIApplicationDidChangeStatusBarFrameNotification也可以監(jiān)聽(tīng)熱點(diǎn)等事件中出現(xiàn)的問(wèn)題诸狭,如問(wèn)題2.

(5)引入sdk報(bào)錯(cuò)(非pod)

_res_9_ninit", referenced from: _setup_dns_server in QNResolver.o 
  1. 項(xiàng)目中需導(dǎo)入 libresolv.dylib或libresolv.9.dylib。(Build Phases --- Link Binary With Libraries)君纫;
  2. 或 (Build Settings --- Linking --- Other Linker Flags) 添加 -lresolv 選項(xiàng)

(6)在使用tableView時(shí)驯遇,使用footerView在最后一行默認(rèn)不顯示最后一條橫線。簡(jiǎn)單粗暴的方法蓄髓,在cell中重寫layoutSubviews方法妹懒。

- (void)layoutSubviews {
    [super layoutSubviews];

    for (UIView *subview in self.contentView.superview.subviews) {
        if ([NSStringFromClass(subview.class) hasSuffix:@"SeparatorView"]) {
              subview.hidden = NO;
        }
    }
}
顯示tableView最后一行橫線

(7)項(xiàng)目中有視頻緩存,使用騰訊云下載完成下載功能双吆,于是問(wèn)題就來(lái)了眨唬,相信在做視頻緩存会前、下載功能的同行可能也會(huì)遇到這種問(wèn)題。

視頻下載完成后匾竿,在 我的緩存中 查看瓦宜,沒(méi)有問(wèn)題,但當(dāng)軟件更新或重新安裝岭妖,視頻列表還在临庇,但視頻打不開(kāi)了。

查看騰訊云視頻成功回調(diào)昵慌,發(fā)現(xiàn)在返回的字典中假夺,緩存文件的路徑是完整的。如圖斋攀。

查看文件路徑

查看文件路徑并重新安裝后會(huì)發(fā)現(xiàn)文件內(nèi)容沒(méi)變已卷,但文件名變了。

重新安裝前
重新安裝后

這說(shuō)明淳蔼,app在重新安裝或升級(jí)后侧蘸,會(huì)重新建一個(gè)文件,并將原來(lái)的文件全部copy過(guò)去鹉梨,然后將原文件刪除讳癌。

知道原因之后就要解決了,當(dāng)然解決的方法簡(jiǎn)單粗暴存皂,既然是文件名晌坤,那就進(jìn)行拼接和裁剪了。在plist文件中存儲(chǔ)的是裁剪后的后半段路徑旦袋,而讀取文件路徑后再拼接上Caches地址骤菠。

獲取Caches目錄路徑的方法:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *cachesDir = [paths objectAtIndex:0];

(8)iOS給好評(píng)時(shí)一般會(huì)直接打開(kāi)app store應(yīng)用詳情界面,其實(shí)也可以直接跳轉(zhuǎn)到評(píng)論頁(yè)面猜憎,更有利于引導(dǎo)用戶打分和評(píng)論娩怎。(將下面id改成自己的app id即可)

[[UIApplication sharedApplication]openURL:[NSURL URLWithString:@"http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewContentsUserReviews?id=id1128294199&pageNumber=0&sortOrdering=2&type=Purple+Software&mt=8"]];

直接跳轉(zhuǎn)到詳情

https://itunes.apple.com/cn/app/jia-zhang-mu-ke/id1128294199?mt=8

(9)鍵盤操作
測(cè)試發(fā)現(xiàn)一個(gè)問(wèn)題搔课,切換輸入法的時(shí)候鍵盤高度會(huì)上移胰柑,查找發(fā)現(xiàn),UIKeyboardWillShowNotification監(jiān)聽(tīng)會(huì)調(diào)用多次爬泥,每次輸入法(如中英文)切換時(shí)會(huì)調(diào)用柬讨,從而調(diào)用相關(guān)修改布局的方法。

多次調(diào)用監(jiān)聽(tīng)

初始時(shí)textField所在的view不顯示在視圖中袍啡,通過(guò)button的觸發(fā)才顯示踩官,因此原監(jiān)聽(tīng)后的調(diào)用方法:

  float time = [noti.userInfo[UIKeyboardAnimationDurationUserInfoKey] floatValue];
  CGRect beginRect = [dic[UIKeyboardFrameBeginUserInfoKey] CGRectValue];
  CGRect endRect = [dic[UIKeyboardFrameEndUserInfoKey] CGRectValue];
  [UIView animateWithDuration:time animations:^{
      self.bottomView.hidden = NO;
      CGRect rect = self.bottomView.frame;
      rect.origin.y -= (beginRect.origin.y - endRect.origin.y+50);
      self.bottomView.frame = rect;
  }];

嘗試用值紀(jì)錄調(diào)用次數(shù),只記錄第一次調(diào)用發(fā)現(xiàn)也不可行境输,故將其view隱藏蔗牡,通過(guò)按鈕的觸發(fā)顯示颖系。

self.bottomView.hidden = NO;
rect.origin.y -= (beginRect.origin.y - endRect.origin.y);

[補(bǔ)充]
后來(lái)發(fā)現(xiàn)鍵盤高度會(huì)變化是由于IQKeybord惹的禍,將其禁用后使用原方法可以辩越。

(10)UITextView回車發(fā)送
UITextField中有這樣一個(gè)代理函數(shù)嘁扼,可以實(shí)現(xiàn)鍵盤回車鍵發(fā)送的功能

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text

但是UITextView中并沒(méi)有這個(gè)方法,所以需要判斷當(dāng)前輸入的字符是否是回車黔攒,然后做出響應(yīng)的處理趁啸。在這個(gè)函數(shù)的最后一個(gè)參數(shù)text代表你每次輸入的的那個(gè)字,所以:

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:  (NSRange)range replacementText:(NSString *)text{
    if ([text isEqualToString:@"\n"]){
        return NO; 
    }

    return YES;
}

(11)TableView如何在初始化就選中某一行督惰?
[self.tableView selectRowAtIndexPath:indexpath animated:YES scrollPosition:UITableViewScrollPositionMiddle]; //選中第5行

(12)UISwitch顏色的改變
switchView.onTintColor = [UIColor colorWithRed:225/256.0 green:225/256.0 blue:225/256.0 alpha:1];
switchView.thumbTintColor = DEF_LightBlueColor;

更多問(wèn)題后續(xù)補(bǔ)充不傅,歡迎探討指正

文章優(yōu)先發(fā)表于:http://keyliu.com
轉(zhuǎn)載請(qǐng)注明出處恃锉。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末泻云,一起剝皮案震驚了整個(gè)濱河市衫冻,隨后出現(xiàn)的幾起案子孽查,更是在濱河造成了極大的恐慌吴叶,老刑警劉巖先誉,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件口予,死亡現(xiàn)場(chǎng)離奇詭異胰坟,居然都是意外死亡留拾,警方通過(guò)查閱死者的電腦和手機(jī)戳晌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)痴柔,“玉大人沦偎,你說(shuō)我怎么就攤上這事】任担” “怎么了豪嚎?”我有些...
    開(kāi)封第一講書人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)谈火。 經(jīng)常有香客問(wèn)我侈询,道長(zhǎng),這世上最難降的妖魔是什么糯耍? 我笑而不...
    開(kāi)封第一講書人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任扔字,我火速辦了婚禮,結(jié)果婚禮上温技,老公的妹妹穿的比我還像新娘革为。我一直安慰自己,他們只是感情好舵鳞,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布震檩。 她就那樣靜靜地躺著,像睡著了一般蜓堕。 火紅的嫁衣襯著肌膚如雪抛虏。 梳的紋絲不亂的頭發(fā)上博其,一...
    開(kāi)封第一講書人閱讀 49,144評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音迂猴,去河邊找鬼贺奠。 笑死,一個(gè)胖子當(dāng)著我的面吹牛错忱,可吹牛的內(nèi)容都是我干的儡率。 我是一名探鬼主播,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼以清,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼儿普!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起掷倔,我...
    開(kāi)封第一講書人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤眉孩,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后勒葱,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體浪汪,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年凛虽,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了死遭。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡凯旋,死狀恐怖呀潭,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情至非,我是刑警寧澤钠署,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布,位于F島的核電站荒椭,受9級(jí)特大地震影響谐鼎,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜趣惠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一狸棍、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧信卡,春花似錦隔缀、人聲如沸题造。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)界赔。三九已至丢习,卻和暖如春牵触,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背咐低。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工揽思, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人见擦。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓钉汗,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親鲤屡。 傳聞我的和親對(duì)象是個(gè)殘疾皇子损痰,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • 概述在iOS開(kāi)發(fā)中UITableView可以說(shuō)是使用最廣泛的控件,我們平時(shí)使用的軟件中到處都可以看到它的影子酒来,類似...
    liudhkk閱讀 8,995評(píng)論 3 38
  • 作業(yè)一 作業(yè)二
    山水遺容千浮世_此花妖亭憶盛衰閱讀 168評(píng)論 0 0
  • 最近陸續(xù)看了「次第花開(kāi)」卢未,「透過(guò)佛法看世界」以及「正念的奇跡」,獲益匪淺堰汉,被佛法的廣闊無(wú)邊和博大精深深深吸引辽社。我做...
    寂顏慕菲閱讀 751評(píng)論 0 1
  • 時(shí)間,太多說(shuō)不清與道不明翘鸭。 曾經(jīng)扒著不放的等回頭滴铅,如今面對(duì)回頭,心情或許是那時(shí)候換位的一種體驗(yàn)就乓,只是在換位中不公平...
    半顆西柚閱讀 326評(píng)論 0 0