iOS devtips

主要記錄一些在平時(shí)開發(fā)中用到的一些小知識(shí)點(diǎn)

1袖裕、tableViewCell初始化時(shí)默認(rèn)的寬度為320(可能是遺留的bug),所以實(shí)際布局時(shí)在- (void)layoutSubviews方法中重載子視圖frame布局券册。
2奈籽、- (void)layoutSubviews方法調(diào)用時(shí)機(jī):
(1) 視圖有frame變化
(2)addsubview的時(shí)候
(3)init時(shí)是不會(huì)觸發(fā)厘惦,只有在initframe時(shí)會(huì)觸發(fā)
3偷仿、-(void)setNeedsLayout標(biāo)記需要重新布局:異步調(diào)用-layoutIfNeeded刷新布局哩簿,一定會(huì)調(diào)用- (void)layoutSubviews
4、-(void)layoutIfNeed如果有要刷新的標(biāo)記酝静,立即調(diào)用-(void)layoutSubviews
立即刷新的方法:

//刷新的視圖
[view layoutIfNeed];

5节榜、 撥打電話的API

NSString *phoneNumber =  [NSString stringWithFormat:@"telprompt:%@", phone];
    dispatch_async(dispatch_get_global_queue(0, 0), ^{
        [[UIApplication sharedApplication] openURL:[NSURL URLWithString:phoneNumber]];
    });

在iOS10 之后會(huì)阻塞主線程,導(dǎo)致有很長(zhǎng)的延遲别智。加上一個(gè)異步線程去處理會(huì)減少延遲宗苍。

6、 iOS11中AppIcon不顯示的問題
使用了CocoaPods的Xcode工程,在iOS11版的手機(jī)上AppIcon不顯示,原因是CocoaPods的資源編譯腳本在iOS11下出了點(diǎn)問題.需要修改腳本.兩種修改方式:

  • 在Podfile添加腳本修改
    1>在Podfile 添加如下代碼
post_install do |installer|
    copy_pods_resources_path = "Pods/Target Support Files/Pods-[工程名]/Pods-[工程名]-resources.sh"
    string_to_replace = '--compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"'
    assets_compile_with_app_icon_arguments = '--compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" --app-icon "${ASSETCATALOG_COMPILER_APPICON_NAME}" --output-partial-info-plist "${BUILD_DIR}/assetcatalog_generated_info.plist"'
    text = File.read(copy_pods_resources_path)
    new_contents = text.gsub(string_to_replace, assets_compile_with_app_icon_arguments)
    File.open(copy_pods_resources_path, "w") {|file| file.puts new_contents }
end

需要注意的是,將[工程名] 換成自己工程的名稱
2>然后運(yùn)行

$pod install
  • 手動(dòng)修改
    打開工程目錄下:[工程名]/Pods/Target Support Files/Pods-[工程名]/Pods-[工程名]-resources.sh這個(gè)文件,替換最后一段代碼:
//修改前
printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"
fi
//修改后
printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" --app-icon "${ASSETCATALOG_COMPILER_APPICON_NAME}" --output-partial-info-plist "${BUILD_DIR}/assetcatalog_generated_info.plist"
fi

7薄榛、Xcode上傳IPA包到iTunes Connect后構(gòu)建版本不顯示
這個(gè)問題是我在xcode升級(jí)到9.0之后上傳一個(gè)新的APP時(shí)遇到的讳窟,因?yàn)榈谝粋€(gè)版本APP比較簡(jiǎn)單所以很多用戶權(quán)限不需要用,導(dǎo)致在plist文件中權(quán)限聲明沒有加全敞恋。出現(xiàn)的問題就是IPA包在上傳到iTunes Connect中在構(gòu)建中顯示了一會(huì)兒就消失不見了丽啡,Apple也沒有任何的提示。經(jīng)過查閱資料發(fā)現(xiàn)有以下幾個(gè)原因?qū)е碌模?/p>

  • 未聲明完整用戶權(quán)限硬猫,iOS10以后Apple更注重保護(hù)用戶權(quán)限,在任何需要使用設(shè)備權(quán)限的地方都需要提前聲明.
  • 訪問了Apple禁止的私有api补箍,一般的是在第三方庫(kù)中(這個(gè)就需要花費(fèi)人工一個(gè)個(gè)的去排查了)。
    第一個(gè)的解決辦法就是在plist文件中添加以下權(quán)限聲明:
<key>NSCameraUsageDescription</key>
    <string>是否允許使用相機(jī)啸蜜?</string>
    <key>NSContactsUsageDescription</key>
    <string>是否允許訪問通訊錄坑雅?</string>
    <key>NSMicrophoneUsageDescription</key>
    <string>是否允許使用麥克風(fēng)?</string>
    <key>NSPhotoLibraryUsageDescription</key>
    <string>是否允許訪問媒體資料庫(kù)衬横?</string>

我在設(shè)置了這幾項(xiàng)之后提交就沒有問題了裹粤,其他的幾項(xiàng)可以需要時(shí)再設(shè)置。

8蜂林、WKWebView加載本地HTML文件

  //Base路徑
    NSURL *baseUrl = [NSURL fileURLWithPath:[NSBundle mainBundle].bundlePath];
    //文件路徑
    NSString *filePath = [[NSBundle mainBundle] pathForResource:@"headLines" ofType:@"html"];
    //html文件
    NSString *html = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil];
    [self.webView loadHTMLString:html baseURL:baseUrl];

向HTML文件中插入數(shù)據(jù)


HTML示例截圖
    NSURL *baseUrl = [NSURL fileURLWithPath:[NSBundle mainBundle].bundlePath];
    NSString *filePath = [[NSBundle mainBundle] pathForResource:@"headLines" ofType:@"html"];
    NSString *html = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil];
    NSString *html1 = [html stringByReplacingOccurrencesOfString:@"{title}" withString:@"頭條文章"];
    NSString *html2 =  [html1 stringByReplacingOccurrencesOfString:@"{time}" withString:@"2018-7-09"];
    NSString *html3 = [html2 stringByReplacingOccurrencesOfString:@"{body}" withString:@"頭條文章頭條文章頭條文章頭條文章頭條文章頭條文章頭條文章頭條文章頭條文章頭條文章頭條文章頭條文章頭條文章頭條文章頭條文章頭條文章頭條文章頭條文章頭條文章頭條文章頭條文章頭條文章頭條文章"];
    [self.webView loadHTMLString:html3 baseURL:baseUrl];

根據(jù)HTML中的標(biāo)示替換字符串即可

9遥诉、動(dòng)畫切換window的根控制器

// options是動(dòng)畫選項(xiàng)

[UIView transitionWithView:[UIApplication sharedApplication].keyWindow duration:0.5f options:UIViewAnimationOptionTransitionCrossDissolve animations:^{
BOOL oldState = [UIView areAnimationsEnabled];
[UIView setAnimationsEnabled:NO];
[UIApplication sharedApplication].keyWindow.rootViewController = [RootViewController new];
[UIView setAnimationsEnabled:oldState];
} completion:^(BOOL finished) {
}];

10、按鈕在屏幕底部左側(cè)時(shí)touchDown事件觸發(fā)延遲悉尾,是因?yàn)橄到y(tǒng)的手勢(shì)影響了底部按鈕事件的傳遞突那。
解決辦法:

//在控制器中設(shè)置
    [self.navigationController.interactivePopGestureRecognizer setDelaysTouchesBegan:NO];
    for (UIGestureRecognizer *gesture in self.view.window.gestureRecognizers) {
        gesture.delaysTouchesBegan = NO;
    }

11挫酿、tableview滑動(dòng)到頂部的方法

//方法一//
[self.tableView  scrollRectToVisible:CGRectMake(0, 0, 1, 1) animated:NO];

//方法二//
[self.tableView setContentOffset:CGPointMake(0,0) animated:NO];

//方法三//
NSIndexPath* indexPat = [NSIndexPath indexPathForRow:0 inSection:0];
[self.tableView scrollToRowAtIndexPath:indexPat atScrollPosition:UITableViewScrollPositionBottom animated:YES];

持續(xù)更新中

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末构眯,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子早龟,更是在濱河造成了極大的恐慌惫霸,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件葱弟,死亡現(xiàn)場(chǎng)離奇詭異壹店,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)芝加,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門硅卢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來射窒,“玉大人,你說我怎么就攤上這事将塑÷龆伲” “怎么了?”我有些...
    開封第一講書人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵点寥,是天一觀的道長(zhǎng)艾疟。 經(jīng)常有香客問我,道長(zhǎng)敢辩,這世上最難降的妖魔是什么蔽莱? 我笑而不...
    開封第一講書人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮戚长,結(jié)果婚禮上盗冷,老公的妹妹穿的比我還像新娘。我一直安慰自己同廉,他們只是感情好正塌,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著恤溶,像睡著了一般乓诽。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上咒程,一...
    開封第一講書人閱讀 49,111評(píng)論 1 285
  • 那天鸠天,我揣著相機(jī)與錄音,去河邊找鬼帐姻。 笑死稠集,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的饥瓷。 我是一名探鬼主播剥纷,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼呢铆!你這毒婦竟也來了晦鞋?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤棺克,失蹤者是張志新(化名)和其女友劉穎悠垛,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體娜谊,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡确买,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了纱皆。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片湾趾。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡芭商,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出搀缠,到底是詐尸還是另有隱情蓉坎,我是刑警寧澤,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布胡嘿,位于F島的核電站蛉艾,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏衷敌。R本人自食惡果不足惜勿侯,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望缴罗。 院中可真熱鬧助琐,春花似錦、人聲如沸面氓。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)舌界。三九已至掘譬,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間呻拌,已是汗流浹背葱轩。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留藐握,地道東北人靴拱。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像猾普,于是被迫代替她去往敵國(guó)和親袜炕。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345

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