一句話筆記,某段時(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ì)遇到 beginUpdates
、endUpdates
的完疫,而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ò)獲取用戶的的 用戶代理 來(lái)區(qū)分是否 是在 App 中展示的還是在瀏覽器中的展示的,也可以換成如何獲取 UserAgent铣焊,并改變它逊朽。
用戶代理(英語(yǔ):User Agent)指的是代表 用戶 行為的軟件 軟件代理程序 所提供的對(duì)自己的一個(gè)標(biāo)識(shí)符。
**PS百度備注: ** Apple開(kāi)發(fā)了Safari曲伊,使用了KHTML叽讳,同時(shí)也增加了很多新特性追他,后來(lái)干脆一鍋煮,另起爐灶叫了WebKit岛蚤,但是它有希望能夠得到那些為KHTML編寫(xiě)的網(wǎng)頁(yè)邑狸,于是Safari標(biāo)稱自己為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ù)器用以基于特定版本的客戶端軟件的已知功能選擇適當(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 刻不容緩啊民褂。