知乎日报第二周完成情况:
完成了主界面cell点进去后的左右轮播效果,正在写评论界面
遇到的问题:
1.scrollView的bug
scrollView遇到了很多bug,最直观的bug就是在左右滑动时,滚动视图可以斜着滑动,解决这个问题就要把滚动视图的contentSize的CGSize第二个参数设为0即可解决这个问题。
//设置ScrollView属性
_scrollView.contentSize = CGSizeMake(5 * SIZE_WIDTH, 0);
上周完成了上面的5个有固定数量的滚动视图,这周在写下面的时候遇到的问题就是让它有无限刷新的功能,在此时加载完成的WKWebView继续刷的时候应该是可以继续网络请求获取数据的,这时候就需要在最后一页滑动时再次网络请求,获取最新数据并且显示出来,我最初把滚动视图宽度设置成了现有的数据个数,在最后一次滑动时,会卡顿一下,直到网络请求成功后才能滚动过去,为了解决这个bug,要把滚动视图的初始宽度设置比数据多一份宽度,滑动时网络请求,不会出现视觉上的卡顿。
//ScrollView宽度设置
_scrollView.contentSize = CGSizeMake(_allArray.count * 6 * SIZE_WIDTH + SIZE_WIDTH, 0);
//多余滑动刷新函数
- (void)scrollViewNextReload {
_scrollView.contentSize = CGSizeMake(_allArray.count * 6 * SIZE_WIDTH + SIZE_WIDTH, 0);
for (int i = 0; i < 6; i++) {
_wkWebView = [[WKWebView alloc] init];
_wkWebView.tag = 1011;
NSURL *url = [NSURL URLWithString:_allArray[_allArray.count - 1][@"stories"][i][@"url"]];
_wkWebView.frame = CGRectMake((_allArray.count - 1) * SIZE_WIDTH * 6 + i * SIZE_WIDTH, 0, SIZE_WIDTH, SIZE_HEIGHT * 0.91 - 40);
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[_wkWebView loadRequest:request];
[self.scrollView addSubview: _wkWebView];
}
_requestFlag = 0;
}
2.主界面进入WKWebView上周遗留bug
在上周时候发现了一个问题,从主界面点击进入WKWebView界面的时候,可能会字典为nil或者显示不到数据,因为只是概率性事件,一直以为是网络问题,最后发现好像是网络请求数据问题,因为我在app启动时,已经显示了两天的数据,最顶部的最新消息和昨天的消息,因为两个数据用的是两个不同的API,所以请求的时候并不分先后顺序,在主界面显示前后顺序并无关系,但是点击进入两个数据相反就会导致ScrollView无数据,下面的点击进去是前面的数据,因此我在传值的时候做了判断,如果顺序错误就在传值前先交换再传值即可。
//两个函数运行顺序是不一定的
[self firstNetworkRequest];
[self beforeNetworkRequest];
//交换第一和第二下标的值
if (_allArray[0][@"top_stories"] == nil) {
NSMutableDictionary *dictionary = [[NSMutableDictionary alloc] init];
dictionary = _allArray[0];
_allArray[0] = _allArray[1];
_allArray[1] = dictionary;
}
3.评论界面刚开始写,遇到瓶颈
这周最后几天开始写评论界面,首先是评论文字的行数和高度不知道如何控制,后面在学长们的博客中看到Masonry不给文字设置高度,它就可以自适应高度,但是cell的高度如何判断我还在构思中,现在完成了长短评论的自定义cell。
[_mainLabel mas_makeConstraints:^(MASConstraintMaker* make) {
make.bottom.equalTo(self).offset(-20);
make.top.equalTo(self).offset(15);
make.left.equalTo(self).offset(30 + (SIZE_WIDTH * 0.1));
make.right.equalTo(self).offset(-20);
}];