1.cell点击获取网页:
iOS (一) - UIWebView 与 WKWebView . 基本使用
2.当点击cell进入界面时,左右滑动切换时更新view会闪白屏并且会出现白屏的情况:
为了用户使用时更加流畅,所以我使用循环一次性将所有的WKWebView
都加载在UIScrollView
上,就不会出现问题了,滑动也更加流畅了,不过当数据特别多的时候,第一次点击会进入的很慢,因为需要一次性加载完。
3.下拉获取数据时,一次会获取多组数据,并且有时会不进入网络请求的block代码块,导致有些日期的数据获取不到:
因为我是使用通知传值来告诉viewController界面要进行网络请求,一开始我将该通知写在了- (void)scrollViewDidScroll:(UIScrollView *)scrollView
并且它触发的条件是:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
if (scrollView.tag == 957) {
CGFloat height = scrollView.frame.size.height;
CGFloat contentOffsetY = scrollView.contentOffset.y;
CGFloat bottomOffset = scrollView.contentSize.height - contentOffsetY; //计算屏幕差
if (bottomOffset <= height * 0.9) {
[[NSNotificationCenter defaultCenter] postNotificationName:@"returnInformation" object:nil userInfo:nil];
}
}
}
通过计算屏幕差来调用,因为使用的这个函数会在你scrollview
的位移改变时就会调用,所以当你拉动的时候如果满足了你的那个条件它就会调用,并且在你松手的时候它还是满足的,就会导致多次的调用,为了解决多次调用的问题,所以我将该判断条件写在了- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
方法中,当你手指停止拖拽的时候它才会调用该函数,然后发送通知,获取一次数据,解决了当时一次性获取多组数据的问题。
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate {
if (scrollView.tag == 957) {
CGFloat height = scrollView.frame.size.height;
CGFloat contentOffsetY = scrollView.contentOffset.y;
CGFloat bottomOffset = scrollView.contentSize.height - contentOffsetY; //计算屏幕差
if (bottomOffset <= height * 0.9) {
[[NSNotificationCenter defaultCenter] postNotificationName:@"returnInformation" object:nil userInfo:nil];
}
}
}
4.下拉获取网络请求的时候会获取到三天之前的数据,而不是后一天的数据:
因为我自己在使用传值的时候用的是通知传值,所以它第一次进行网络请求的时候程序才注册这个通知,导致传回来的数据为nil,后来我使用属性传值,因为封装了网络请求,所以它相当于一个单例,它只存在一个,所以可以创建它,然后对其的属性使用属性传值然后在进行网络请求,改完之后发现数据可以获取到两天之前了。还是差一天,最后通过学姐的细心发现,发现如果你要请求前一天的数据,最后的日期字符串就在今天就可以了,而我是先将日期获取到了前一天,导致中间缺了一天。
5.进行网络请求的时候小菊花的设置不太了解:
这里这个是教你们如何使用的,特别简单粗暴的方法:iOS系统自带的UIActivityIndicatorView小菊花
此处的self.flashCell
是tableView
的最后一个cell
,专门用来加载小菊花。
//给最后一个cell设置小菊花
- (void)setFlashFlower {
//设置小菊花
self.flashView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleMedium];
[self.flashCell.contentView addSubview:self.flashView];
self.flashView.color = [UIColor grayColor];
self.flashView.backgroundColor = [UIColor clearColor];
self.flashView.hidesWhenStopped = YES;
[self.flashView mas_makeConstraints:^(MASConstraintMaker *make) {
make.width.equalTo(@(myWidth));
make.height.equalTo(@100);
make.top.equalTo(self.flashCell).offset(0);
make.left.equalTo(self.flashCell).offset(0);
}];
}
在要小菊花出现时使用[self.flashView startAnimating]
,停止时使用[self.flashView stopAnimating]
。
6.使用WKWebView时,我想将WKWebView加到新建的UIview,然后在将UIView加到UIScrollView上,如果只有一个的话可没有什么问题,但是如果使用循环加载的话,它就只会有第一个界面加载成功,其它的都是白的:
7.循环使用Masonry约束添加控件到scrollview,控件无法添加成功:
这是因为scrollview
的left
,right
, top
,bottom
是基于contentsize
,而不是bounds
,而contentsize
基于子控件,所以需要先添加一个子控件。
iOS —masonry设置scrollview的子控件
使用Masonry对UIScrollView自动布局
8.WKWebView无法返回:
这里因为WKWebView
的视图是在原来视图的基础上再添加一个视图的,原来的视图被遮盖住了,所以我这里直接使用:
- (void)backView:(UIButton *)button {
[self.viewScrollView removeFromSuperview];
}
将添加到原视图上的所有视图都移除掉,达到返回的目的。
9.导航栏隐藏问题:
因为推出新的视图我用的是push
所以就会出现推出的视图有导航栏的问题,但是我又不想使用这个导航栏,所以我就需要将它隐藏掉。
iOS 导航栏的正确隐藏方式