一句話筆記(08)

一句話筆記,某段時(shí)間內(nèi)遇到或看到的某個(gè)可記錄的點(diǎn)。 2016-8-26

  • NSString使用stringWithFormat拼接的實(shí)用點(diǎn)
  • beginUpdates & endUpdates
  • Autoresizing特性
  • 如何讓 前端頁(yè)面 區(qū)分 是在 App 端展示的還是 瀏覽器端展示
1、NSString使用stringWithFormat拼接的實(shí)用點(diǎn)
  • 保留2位小數(shù)點(diǎn)
//.2代表小數(shù)點(diǎn)后面保留2位(2代表保留的數(shù)量)
NSString *string = [NSString stringWithFormat:@"%.2f",M_PI];
//輸出結(jié)果是: 3.14
NSLog(@"%@", string);
  • 用0補(bǔ)全的方法
NSInteger count = 3;
 //03代表:如果count不足3位 用0在最前面補(bǔ)全(3代表總輸出的個(gè)數(shù))
 NSString *string = [NSString stringWithFormat:@"%03ld",count];
//輸出結(jié)果是: 003
 NSLog(@"%@", string);
  • 字符串中有特殊符號(hào)%怎么辦
NSInteger count = 80;
//%是一個(gè)特殊符號(hào) 如果在NSString中用到%需要如下寫(xiě)法
 NSString *string = [NSString stringWithFormat:@"%ld%%",count];
//    NSString *string = [NSString stringWithFormat:@"%ld%@",count,@"%"];
//輸出結(jié)果是: 80%
NSLog(@"%@", string);
  • 字符串中有特殊符號(hào)"怎么辦
NSInteger count = 50;
//"是一個(gè)特殊符號(hào), 如果在NSString中用到"需要用\進(jìn)行轉(zhuǎn)義
NSString *string = [NSString stringWithFormat:@"%ld\"",count];
//輸出結(jié)果是: 50"
 NSLog(@"%@", string);

PS:閱讀自iOS 開(kāi)發(fā)中你是否遇到這些經(jīng)驗(yàn)問(wèn)題(一)

另外,我看到它原文中 是用" %zd",個(gè)人認(rèn)為是可以斟酌的

NSInteger:%ld
size_t:%zd
NSUInteger:%lu
%d/%D:帶符號(hào)32位整數(shù)(int)
%o/%O:無(wú)符號(hào)32位整數(shù)(unsigned int)的八進(jìn)制格式
%x/%X:無(wú)符號(hào)32位整數(shù)(unsigned int)的十六進(jìn)制格式
%c:8位無(wú)符號(hào)字符(unsigned char)
%C:16位UNICODE字符(unichar)
%f:64位浮點(diǎn)數(shù)(double

在 NSInteger 情況下, 還是用 %ld吧,上述實(shí)用點(diǎn)中第二點(diǎn),沒(méi)用過(guò),得記錄下。

2、 beginUpdates & endUpdates

這個(gè)以前,我平常沒(méi)怎么用到,但是在看我們老項(xiàng)目的時(shí)候,發(fā)現(xiàn)啦它

[tableView beginUpdates];
[tableView reloadData];
[tableView endUpdates];

很疑惑為什么要這樣寫(xiě),結(jié)果查閱后,認(rèn)為這樣寫(xiě)是錯(cuò)的,因?yàn)橐话阄覀円獔?zhí)行動(dòng)畫(huà)時(shí),才會(huì)遇到 beginUpdatesendUpdates 的,而reloadData 是更新數(shù)據(jù)源的。

[tableView beginUpdates];
// 刪除、插入、更新
[tableView endUpdates];
[tableView reloadRowsAtIndexPaths:@[] withRowAnimation:UITableViewRowAnimationAutomatic];

以前直接這么寫(xiě)也沒(méi)遇到問(wèn)題,但是系統(tǒng)有它,肯定是有其原因的,所以認(rèn)為一般我們用到刪除、更新、插入帶有動(dòng)畫(huà)時(shí) (withRowAnimation) 配合用它會(huì)更合適。

3、 Autoresizing 特性

現(xiàn)在我們一般都用 AutoLayout , 但是以前 Autoresizing 使用還是很常見(jiàn)的,畢竟之前是木有自動(dòng)布局的,在看一些老的代碼中常看到,特此記錄下。

Autoresizing: 當(dāng) UIView 的 autoresizesSubviews是YES時(shí),(默認(rèn)是YES), 那么在其中的子view會(huì)根據(jù)它自身的autoresizingMask屬性來(lái)自動(dòng)適應(yīng)其與superView之間的位置和大小。autoresizingMask是一個(gè)枚舉類(lèi)型, 默認(rèn)是UIViewAutoresizingNone, 也就是不會(huì) autoresize。

typedef NS_OPTIONS(NSUInteger, UIViewAutoresizing) { 
UIViewAutoresizingNone = 0,  //view的frame不會(huì)隨superview的改變而改變
UIViewAutoresizingFlexibleLeftMargin = 1 << 0,  //自動(dòng)調(diào)整view與superview左邊的距離保證右邊距離不變
UIViewAutoresizingFlexibleWidth = 1 << 1, //自動(dòng)調(diào)整view的寬,保證與superView的左右邊距不變
UIViewAutoresizingFlexibleRightMargin = 1 << 2, //自動(dòng)調(diào)整view與superview右邊的距離保證左邊距不變
UIViewAutoresizingFlexibleTopMargin = 1 << 3,//自動(dòng)調(diào)整view與superview頂部的距離保證底部距離不變
UIViewAutoresizingFlexibleHeight = 1 << 4,  //自動(dòng)調(diào)整view的高,保證與superView的頂部和底部距離不變
UIViewAutoresizingFlexibleBottomMargin = 1 << 5 //自動(dòng)調(diào)整view與superview底部部的距離保證頂部距離不變
};

備注來(lái)源:iOS自動(dòng)布局之Autoresizing

4、如何讓 前端頁(yè)面 區(qū)分 是在 App 端展示的還是 瀏覽器端展示

簡(jiǎn)單的說(shuō),可以通過(guò)獲取用戶(hù)的的 用戶(hù)代理 來(lái)區(qū)分是否 是在 App 中展示的還是在瀏覽器中的展示的,也可以換成如何獲取 UserAgent,并改變它。

用戶(hù)代理(英語(yǔ):User Agent)指的是代表 用戶(hù) 行為的軟件 軟件代理程序 所提供的對(duì)自己的一個(gè)標(biāo)識(shí)符。

**PS百度備注: ** Apple開(kāi)發(fā)了Safari,使用了KHTML,同時(shí)也增加了很多新特性,后來(lái)干脆一鍋煮,另起爐灶叫了WebKit,但是它有希望能夠得到那些為KHTML編寫(xiě)的網(wǎng)頁(yè),于是Safari標(biāo)稱(chēng)自己為Mozilla/5.0 (Macintosh; U; PPC Mac OS X; de-de) AppleWebKit/85.7 (KHTML, like Gecko) Safari/85.5。

PS維基備注:在HTTP中,User-Agent字符串通常被用于內(nèi)容協(xié)商,而原始服務(wù)器為該響應(yīng)選擇適當(dāng)?shù)膬?nèi)容或操作參數(shù)。例如,User-Agent字符串可能被網(wǎng)絡(luò)服務(wù)器用以基于特定版本的客戶(hù)端軟件的已知功能選擇適當(dāng)?shù)淖凅w。

iOS 中獲取 userAgent
  • UIWebView
NSString *userAgent = [webView stringByEvaluatingJavaScriptFromString:@"navigator.userAgent"];
NSLog(@"userAgent === %@",userAgent);
  • WKWebView
[wkWebView evaluateJavaScript:@"navigator.userAgent" completionHandler:^(id result, NSError *error) { 
        NSLog(@"userAgent === %@",result);
}];
iOS 中改變 userAgent
  • UIWebView
// 此處可直接在 AppDelegate 中 didFinishLaunchingWithOptions:
UIWebView *webView = [[UIWebView alloc] initWithFrame:CGRectZero];
NSString *userAgent = [webView stringByEvaluatingJavaScriptFromString:@"navigator.userAgent"];
NSString *newUserAgent = [userAgent stringByAppendingString:@" iOS_userAgent"];
NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:newUserAgent, @"UserAgent", nil];
[[NSUserDefaults standardUserDefaults] registerDefaults:dictionary];
  • WKWebView
    這是iOS 9.0 之后增加的一個(gè)屬性,customUserAgent
@property (nullable, nonatomic, copy) NSString *customUserAgent NS_AVAILABLE(10_11, 9_0);

iOS 8.0 - iOS 9.0 之間 WKWebView 改變 userAgent 比較特殊,可參考 Set useragent in WKWebview

換一個(gè)角度想,對(duì) userAgent 的了解也是對(duì) Web 端學(xué)習(xí)的另一個(gè)開(kāi)始,畢竟現(xiàn)在學(xué)習(xí)Web 刻不容緩啊。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,732評(píng)論 6 539
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,214評(píng)論 3 426
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 177,781評(píng)論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 63,588評(píng)論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,315評(píng)論 6 410
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 55,699評(píng)論 1 327
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,698評(píng)論 3 446
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 42,882評(píng)論 0 289
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,441評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,189評(píng)論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,388評(píng)論 1 372
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,933評(píng)論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,613評(píng)論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 35,023評(píng)論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 36,310評(píng)論 1 293
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 52,112評(píng)論 3 398
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,334評(píng)論 2 377

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

  • KVC(Key-value coding)鍵值編碼,單看這個(gè)名字可能不太好理解。其實(shí)翻譯一下就很簡(jiǎn)單了,就是指iO...
    朽木自雕也閱讀 1,571評(píng)論 6 1
  • 原文 在這里總結(jié)一些iOS開(kāi)發(fā)中的小技巧,能大大方便我們的開(kāi)發(fā),持續(xù)更新。 1.UITableView的Group...
    無(wú)灃閱讀 792評(píng)論 0 2
  • //設(shè)置尺寸為屏幕尺寸的時(shí)候self.window = [[UIWindow alloc] initWithFra...
    LuckTime閱讀 830評(píng)論 0 0
  • // // JackDateAndDateView.m // ZHB // // Created by JackR...
    JackRen閱讀 421評(píng)論 0 1
  • ——2017年國(guó)慶大理無(wú)為寺禪修感悟 來(lái)大理無(wú)為寺禪修是源于不久前一個(gè)大學(xué)同學(xué)的推薦,他說(shuō)他最近去了無(wú)...
    lizzy1012閱讀 1,524評(píng)論 1 2