前段時候在簡書看博客時抚吠,看到Monkey_ALin 分享的高仿花田小憩(Swift版)覆劈,項(xiàng)目整體不是太復(fù)雜欲险,并且展示效果確實(shí)挺不錯的,就萌發(fā)了工作之余用OC仿寫的念頭姐霍。ps:主要是偷懶鄙麦,不用再找UI,不用再找接口了镊折,在這要非常感謝Monkey_ALin,節(jié)省了很多時間介衔!
展示效果
項(xiàng)目整體的實(shí)現(xiàn)邏輯與思路與Swift版的差不多恨胚,大家可以參照文章。另外完善了一些Swift版的部分問題炎咖。
完善部分
1.點(diǎn)擊導(dǎo)航欄左側(cè)按鈕出現(xiàn)下拉蒙版視圖
Swift版的赃泡,蒙版的Top約束是與當(dāng)前 tableView的偏移量為參考點(diǎn)寒波,當(dāng) tableView滑動時偏移量一直在改變,蒙版frame也會隨之改變升熊,出現(xiàn)這種情況俄烁。所以解決這種情況,蒙版約束的參考物一定是固定的级野,剛開始我用navigationBar的底部為參照物页屠,看似解決了這個問題,但是當(dāng)點(diǎn)擊蒙版上的cell蓖柔,進(jìn)入下一個控制器的時候辰企,navigationBar的位置竟然會發(fā)生改變,正常情況下况鸣,navigationBar(44)上面有狀態(tài)欄(20)牢贸,當(dāng)跳轉(zhuǎn)的時候狀態(tài)欄會消失,這就造成了镐捧,跳轉(zhuǎn)后返回時潜索,蒙版會上移20(狀態(tài)欄高度)。為了解決這個問題想了很久懂酱,一直在鉆牛角尖竹习,想著怎么在頂部找到或者添加一個固定的控件當(dāng)做蒙版參照物, 但是在TableViewController上找到固定控件太麻煩了玩焰,最后用了最直接的方法由驹,為控制器換個爹(代碼也拼爹。昔园。)蔓榄!把父類TableViewController換成 ViewController,以ViewControllerView的top為參考點(diǎn)默刚。
總結(jié):當(dāng)遇到界面復(fù)雜的TableView時候甥郑,最好使用ViewController,方便擴(kuò)展荤西。
//設(shè)置blurView的約束
[self.blurView mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.equalTo(self.tableView);
make.top.equalTo(self.view.mas_top);
make.size.mas_equalTo(CGSizeMake(MY_WIHTE, MY_HEIGHT-49-64));
}];
2.詳情頁webview的高度
詳情頁用H5頁面展示的澜搅,cell里面嵌套一個webview,然后根據(jù)webview的高度來確定cell 的高度邪锌。Swift版在webViewDidFinishLoad中使用webView.scrollView.contentSize.height取出高度勉躺,而我使用[[webView stringByEvaluatingJavaScriptFromString:@"document.body.offsetHeight;"] intValue];來拿到內(nèi)容高度,通過打印用兩種方法拿到的高度觅丰,可以看出直接使用webView.scrollView.contentSize.heigh第一次拿到的高度在網(wǎng)絡(luò)不好時饵溅,有時候不準(zhǔn)確,會造成cell內(nèi)容展示不全妇萄。
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
//加載本地的JS文件
NSString *jsStr = [NSString stringWithContentsOfURL:[[NSBundle mainBundle] URLForResource:@"image" withExtension:@"js"] encoding:NSUTF8StringEncoding error:nil];
[webView stringByEvaluatingJavaScriptFromString:jsStr];
//為每個圖片添加點(diǎn)擊事件
[webView stringByEvaluatingJavaScriptFromString:@"setImageClick()"];
NSInteger height = [[webView stringByEvaluatingJavaScriptFromString:@"document.body.offsetHeight;"] intValue];
//避免浪費(fèi)性能蜕企,所以計(jì)算一次高度即可
if (!self.isFinishLoad && webView.scrollView.contentSize.height > 0) {
self.isFinishLoad = YES ;
self.cellHeigth = height;
//#warning 使用這個方法算出的高度不準(zhǔn)
// self.cellHeigth = webView.scrollView.contentSize.height;
}
}
3.商城模塊的容錯處理
在商城模塊中咬荷,第一個自定義cell是一個輪播圖,后臺輪播數(shù)據(jù)非常不穩(wěn)定轻掩,有時候請求結(jié)果為空幸乒,原版做了容錯處理,在請求數(shù)據(jù)為空的時候唇牧,不顯示第一個輪播cell.OC版完善了容錯處理罕扎。
4.完善了訂單頁 增加添加發(fā)票地址
后記:
用OC仿寫后,與swift相對比奋构。swift這門語言及其精簡優(yōu)雅壳影,代碼量以及文件量只有OC的一半左右。所以弥臼,兄弟們宴咧,閑暇之余不要忘了swift,swift才是以后的主流.另外項(xiàng)目中有一個bug,沒有解決径缅,有興趣的可以下載項(xiàng)目后掺栅,找到帶有警告的那個標(biāo)注(唯一的警告處),解決后私信交流交流纳猪,感覺項(xiàng)目對自己技術(shù)有幫助的氧卧,歡迎start,鼓勵一下。**github:OC版 swift版 **