前段時候在簡書看博客時,看到Monkey_ALin 分享的高仿花田小憩(Swift版),項目整體不是太復雜,并且展示效果確實挺不錯的,就萌發了工作之余用OC仿寫的念頭。ps:主要是偷懶,不用再找UI,不用再找接口了,在這要非常感謝Monkey_ALin,節省了很多時間!
展示效果
專題部分1
專題部分2
商城部分1
商城部分2
我的部分
項目整體的實現邏輯與思路與Swift版的差不多,大家可以參照文章。另外完善了一些Swift版的部分問題。
完善部分
1.點擊導航欄左側按鈕出現下拉蒙版視圖
點擊導航欄左側按鈕出現下拉蒙版視圖
Swift版的,蒙版的Top約束是與當前 tableView的偏移量為參考點,當 tableView滑動時偏移量一直在改變,蒙版frame也會隨之改變,出現這種情況。所以解決這種情況,蒙版約束的參考物一定是固定的,剛開始我用navigationBar的底部為參照物,看似解決了這個問題,但是當點擊蒙版上的cell,進入下一個控制器的時候,navigationBar的位置竟然會發生改變,正常情況下,navigationBar(44)上面有狀態欄(20),當跳轉的時候狀態欄會消失,這就造成了,跳轉后返回時,蒙版會上移20(狀態欄高度)。為了解決這個問題想了很久,一直在鉆牛角尖,想著怎么在頂部找到或者添加一個固定的控件當做蒙版參照物, 但是在TableViewController上找到固定控件太麻煩了,最后用了最直接的方法,為控制器換個爹(代碼也拼爹。。)!把父類TableViewController換成 ViewController,以ViewControllerView的top為參考點。
總結:當遇到界面復雜的TableView時候,最好使用ViewController,方便擴展。
//設置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的高度
詳情頁webview的高度
詳情頁用H5頁面展示的,cell里面嵌套一個webview,然后根據webview的高度來確定cell 的高度。Swift版在webViewDidFinishLoad中使用webView.scrollView.contentSize.height取出高度,而我使用[[webView stringByEvaluatingJavaScriptFromString:@"document.body.offsetHeight;"] intValue];來拿到內容高度,通過打印用兩種方法拿到的高度,可以看出直接使用webView.scrollView.contentSize.heigh第一次拿到的高度在網絡不好時,有時候不準確,會造成cell內容展示不全。
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
//加載本地的JS文件
NSString *jsStr = [NSString stringWithContentsOfURL:[[NSBundle mainBundle] URLForResource:@"image" withExtension:@"js"] encoding:NSUTF8StringEncoding error:nil];
[webView stringByEvaluatingJavaScriptFromString:jsStr];
//為每個圖片添加點擊事件
[webView stringByEvaluatingJavaScriptFromString:@"setImageClick()"];
NSInteger height = [[webView stringByEvaluatingJavaScriptFromString:@"document.body.offsetHeight;"] intValue];
//避免浪費性能,所以計算一次高度即可
if (!self.isFinishLoad && webView.scrollView.contentSize.height > 0) {
self.isFinishLoad = YES ;
self.cellHeigth = height;
//#warning 使用這個方法算出的高度不準
// self.cellHeigth = webView.scrollView.contentSize.height;
}
}
3.商城模塊的容錯處理
商城模塊的容錯處理
輪播圖無數據時顯示
在商城模塊中,第一個自定義cell是一個輪播圖,后臺輪播數據非常不穩定,有時候請求結果為空,原版做了容錯處理,在請求數據為空的時候,不顯示第一個輪播cell.OC版完善了容錯處理。
4.完善了訂單頁 增加添加發票地址
訂單頁
訂單頁
后記:
用OC仿寫后,與swift相對比。swift這門語言及其精簡優雅,代碼量以及文件量只有OC的一半左右。所以,兄弟們,閑暇之余不要忘了swift,swift才是以后的主流.另外項目中有一個bug,沒有解決,有興趣的可以下載項目后,找到帶有警告的那個標注(唯一的警告處),解決后私信交流交流,感覺項目對自己技術有幫助的,歡迎start,鼓勵一下。**github:OC版 swift版 **