iOS記錄

注意點(diǎn)

1、使用ALAssetsLibrary需要強(qiáng)引用强霎。

2、使用changeDetailsForFetchResult:時(shí)蓉冈,PHFetchResult要強(qiáng)引用城舞。

3、textField相關(guān)
 3.1寞酿、textField右對(duì)齊狀態(tài)下家夺,輸入空格后,光標(biāo)跳轉(zhuǎn)至左側(cè)伐弹。
 3.2拉馋、textField右對(duì)齊狀態(tài)下,手寫輸入會(huì)產(chǎn)生一個(gè)中文空格惨好。
 3.3椅邓、直接對(duì)textField.text賦值光標(biāo)會(huì)跳到右側(cè)。
 3.4昧狮、textField:shouldChangeCharactersInRange:replacementString:方法在iOS10之前輸入中文不會(huì)觸發(fā)景馁。
 3.5、textField右對(duì)齊狀態(tài)下逗鸣,在光標(biāo)前面無(wú)字符的情況下合住,無(wú)法輸入空格绰精,需使用\u00a0替代。

4透葛、使用ALAssetsLibrary獲取到image后直接使用笨使,當(dāng)在PC端刪除圖片并在手機(jī)端使用Layer動(dòng)畫時(shí),Cell會(huì)閃爍僚害。

5硫椰、轉(zhuǎn)場(chǎng)動(dòng)畫過(guò)程中截屏需使用GCD,否則有可能會(huì)有黑屏萨蚕。

// To avoid a blank snapshot, defer snapshotting the incoming view until it
// has had a chance to perform layout and drawing (1 run-loop cycle).
dispatch_async(dispatch_get_main_queue(), ^{
    UIGraphicsBeginImageContextWithOptions(containerView.bounds.size, YES, containerView.window.screen.scale);
    [toView drawViewHierarchyInRect:containerView.bounds afterScreenUpdates:NO];
    toViewSnapshot = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
});

6靶草、刪除cookie

NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
NSArray *cookies =  [[storage cookies] copy];

for (NSHTTPCookie *cookie in cookies) {
    [storage deleteCookie:cookie];
}

7、web認(rèn)證
UIWebView:使用NSURLConnection
WKWebView:使用

- (void)webView:(WKWebView *)webView didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition, NSURLCredential *))completionHandler  {
}

8岳遥、使用FLEX時(shí)奕翔,在轉(zhuǎn)場(chǎng)動(dòng)畫時(shí)旋轉(zhuǎn)屏幕,
iOS8狀態(tài)欄會(huì)跟著轉(zhuǎn)
iOS9以上浩蓉,屏幕會(huì)一起轉(zhuǎn)派继,出現(xiàn)黑屏

9、

NSString *someString = nil;
if (NSNotFound != [someString rangeOfString:@"swift"].location) {
    NSLog(@"Someone mentioned swift!");
}

如果 someString 是 nil捻艳,那么 rangeOfString: 消息將返回一個(gè)值都為零的NSRange驾窟。也就是說(shuō).location 將為零,而 NSNotFound 被定義為 NSIntegerMax认轨。這樣一來(lái)绅络,當(dāng) someString 是 nil 時(shí),if 語(yǔ)句的內(nèi)容將被執(zhí)行好渠。

小技巧

1昨稼、橫屏顯示狀態(tài)欄
非劉海屏:

[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];
[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationNone];

劉海屏:
暫時(shí)沒(méi)有辦法节视,下圖是蘋果給的答復(fù)拳锚。


WechatIMG381.jpeg

2、設(shè)置UserAgent

[self.webViewAdapter stringByJavaScriptFromString:@"navigator.userAgent" handler:^(id  _Nonnull result) {
    NSString *appCurVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
    NSString *UserAgentValue = [NSString stringWithFormat:@"XXX %@ %@", appCurVersion, result];
    NSDictionary *dictionary = [[NSDictionary alloc] initWithObjectsAndKeys:UserAgentValue, @"UserAgent", nil];
    [[NSUserDefaults standardUserDefaults] registerDefaults:dictionary];
    [[NSUserDefaults standardUserDefaults] synchronize];
    ws.webViewAdapter = nil;
}];

3寻行、設(shè)置textField光標(biāo)位置

@interface UITextField (Cursor)

- (NSInteger)cursorIndex;
- (void)setCursorIndex:(NSInteger)index;

@end

@implementation UITextField (Cursor)

- (NSInteger)cursorIndex {
    
    UITextPosition *beginning = self.beginningOfDocument;
    UITextRange *selectedRange = self.selectedTextRange;
    UITextPosition *selectionStart = selectedRange.start;
    
    return [self offsetFromPosition:beginning toPosition:selectionStart];
}

- (void)setCursorIndex:(NSInteger)index {
    
    UITextPosition *beginning = self.beginningOfDocument;
    UITextPosition *position = [self positionFromPosition:beginning offset:index];
    UITextRange *selectionRange = [self textRangeFromPosition:position toPosition:position];
    
    [self setSelectedTextRange:selectionRange];
}

@end

4霍掺、判斷字符串是否包含Emoji

@interface NSString (Emoji)

+ (BOOL)stringContainsEmoji:(NSString *)string;

@end

@implementation NSString (Emoji)

+ (BOOL)stringContainsEmoji:(NSString *)string {
    
    __block BOOL containsEmoji = NO;
    [string enumerateSubstringsInRange:NSMakeRange(0, [string length])
                             options:NSStringEnumerationByComposedCharacterSequences
                          usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) {
                              
         const unichar hs = [substring characterAtIndex:0];
         // surrogate pair
         if (0xd800 <= hs && hs <= 0xdbff) {
             if (substring.length > 1) {
                 const unichar ls = [substring characterAtIndex:1];
                 const int uc = ((hs - 0xd800) * 0x400) + (ls - 0xdc00) + 0x10000;
                 if (0x1d000 <= uc && uc <= 0x1f9c0) {
                     containsEmoji = YES;
                 }
             }
         } else if (substring.length > 1) {
             const unichar ls = [substring characterAtIndex:1];
             if (ls == 0x20e3 || ls == 0xfe0f || ls == 0xd83c) {
                 containsEmoji = YES;
             }
         } else {
             // non surrogate
             if (0x2100 <= hs && hs <= 0x278a) {
                 containsEmoji = YES;
             } else if (0x2793 <= hs && hs <= 0x27ff) {
                 containsEmoji = YES;
             } else if (0x2B05 <= hs && hs <= 0x2b07) {
                 containsEmoji = YES;
             } else if (0x2934 <= hs && hs <= 0x2935) {
                 containsEmoji = YES;
             } else if (0x3297 <= hs && hs <= 0x3299) {
                 containsEmoji = YES;
             } else if (hs == 0xa9 || hs == 0xae || hs == 0x303d || hs == 0x3030 || hs == 0x2b55 || hs == 0x2b1c || hs == 0x2b1b || hs == 0x2b50) {
                 containsEmoji = YES;
             }
         }
         if (containsEmoji) {
             *stop = YES;
         }
     }];
    
    return containsEmoji;
}

@end

5.1、給WKWebView添加Cookie

NSMutableURLRequest *mutableURLRequest = [[NSMutableURLRequest alloc] initWithURL:request.URL];
NSString *cookie = [self p_getCurrentCookieWithUrl:request.URL];
if (![cookie isEqualToString:@""]) {
    [mutableURLRequest addValue:cookie forHTTPHeaderField:@"Cookie"];
}

[self.wkWebView loadRequest:mutableURLRequest];

- (NSString *)p_getCurrentCookieWithUrl:(NSURL *)url {
    
    NSMutableString *cookieStr = [[NSMutableString alloc] init];
    NSArray *array =  [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookiesForURL:url];
    
    if ([array count] > 0) {
        for (NSHTTPCookie *cookie in array) {
            [cookieStr appendFormat:@"%@=%@;",cookie.name, cookie.value];
        }
        [cookieStr deleteCharactersInRange:NSMakeRange(cookieStr.length - 1, 1)];
    }
    
    return cookieStr;
}

6拌蜘、使用動(dòng)態(tài)閾值加載數(shù)據(jù)

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    
    CGFloat threshold = 0.7;
    CGFloat itemPerPage = 10;
    
    CGFloat current = scrollView.contentOffset.y + scrollView.frame.size.height;
    CGFloat total = scrollView.contentSize.height;
    CGFloat ratio = current / total;
    
    CGFloat needRead =  [self.dataArray count] - itemPerPage * (1 - threshold) + 1;
    CGFloat totalItem = [self.dataArray count] + 1;
    CGFloat newThreshold = needRead / totalItem;
    
    if (ratio >= newThreshold) {
        // load next page

    }
}

7杆烁、查看源碼

clang -rewrite-objc main.m

8、升級(jí)了Xcode并且改了名

sudo xcode-select -switch /Applications/Xcode8.3.app/Contents/Developer

9简卧、WKWebview中部分鏈接無(wú)法打開(kāi)

- (WKWebView *)webView:(WKWebView *)webView createWebViewWithConfiguration:(WKWebViewConfiguration *)configuration forNavigationAction:(WKNavigationAction *)navigationAction windowFeatures:(WKWindowFeatures *)windowFeatures {
    
    if (!navigationAction.targetFrame) {
        [webView loadRequest:navigationAction.request];
    }
    return nil;
}

10兔魂、安裝cocoapods

sudo gem install -n /usr/local/bin cocoapods

11、獲取當(dāng)前的Wifi名

- (NSString *)getCurrentWifiHotSpotName {
    
    NSString *wifiName = nil;
    NSArray *ifs = (__bridge_transfer id)CNCopySupportedInterfaces();
    for (NSString *ifnam in ifs) {
        NSDictionary *info = (__bridge_transfer id)CNCopyCurrentNetworkInfo((__bridge CFStringRef)ifnam);
        if (info[@"SSID"]) {
            wifiName = info[@"SSID"];
        }
    }
    return wifiName;
}

12举娩、連接Wifi(iOS 11)
1)打開(kāi)Capabilities中的Hotspot Configuration

An application that needs access to the NEHotspotConfiguration API must have
the “com.apple.developer.networking.HotspotConfiguration” entitlement.

2)連接代碼

if (@available(iOS 11.0, *)) {
    NEHotspotConfiguration *hotspotConfig = [[NEHotspotConfiguration alloc] initWithSSID:@"123" passphrase:@"12356789" isWEP:NO];
    
    NEHotspotConfigurationManager *hotspotManager = [NEHotspotConfigurationManager sharedManager];
    
    [hotspotManager applyConfiguration:hotspotConfig completionHandler:^(NSError * _Nullable error) {
        NSLog(@"%@", error ? : @"Success");
    }];
} else {
    NSLog(@"系統(tǒng)版本低于iOS 11.");
}

未完待續(xù) 析校、

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末构罗,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子智玻,更是在濱河造成了極大的恐慌遂唧,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,378評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件吊奢,死亡現(xiàn)場(chǎng)離奇詭異盖彭,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)页滚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門召边,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人逻谦,你說(shuō)我怎么就攤上這事掌实。” “怎么了邦马?”我有些...
    開(kāi)封第一講書人閱讀 152,702評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵贱鼻,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我滋将,道長(zhǎng)邻悬,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 55,259評(píng)論 1 279
  • 正文 為了忘掉前任随闽,我火速辦了婚禮父丰,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘掘宪。我一直安慰自己蛾扇,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布魏滚。 她就那樣靜靜地躺著镀首,像睡著了一般。 火紅的嫁衣襯著肌膚如雪鼠次。 梳的紋絲不亂的頭發(fā)上更哄,一...
    開(kāi)封第一講書人閱讀 49,036評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音腥寇,去河邊找鬼成翩。 笑死,一個(gè)胖子當(dāng)著我的面吹牛赦役,可吹牛的內(nèi)容都是我干的麻敌。 我是一名探鬼主播,決...
    沈念sama閱讀 38,349評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼掂摔,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼术羔!你這毒婦竟也來(lái)了职辅?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 36,979評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤聂示,失蹤者是張志新(化名)和其女友劉穎域携,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體鱼喉,經(jīng)...
    沈念sama閱讀 43,469評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡秀鞭,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了扛禽。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片锋边。...
    茶點(diǎn)故事閱讀 38,059評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖编曼,靈堂內(nèi)的尸體忽然破棺而出豆巨,到底是詐尸還是另有隱情,我是刑警寧澤掐场,帶...
    沈念sama閱讀 33,703評(píng)論 4 323
  • 正文 年R本政府宣布往扔,位于F島的核電站,受9級(jí)特大地震影響熊户,放射性物質(zhì)發(fā)生泄漏萍膛。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評(píng)論 3 307
  • 文/蒙蒙 一嚷堡、第九天 我趴在偏房一處隱蔽的房頂上張望蝗罗。 院中可真熱鬧,春花似錦蝌戒、人聲如沸串塑。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,262評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)桩匪。三九已至,卻和暖如春粹淋,著一層夾襖步出監(jiān)牢的瞬間吸祟,已是汗流浹背瑟慈。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工桃移, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人葛碧。 一個(gè)月前我還...
    沈念sama閱讀 45,501評(píng)論 2 354
  • 正文 我出身青樓借杰,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親进泼。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蔗衡,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評(píng)論 2 345

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