【iOS】—— 知乎日报第二周遇到的问题

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.flashCelltableView的最后一个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上,如果只有一个的话可没有什么问题,但是如果使用循环加载的话,它就只会有第一个界面加载成功,其它的都是白的:

iOS WKWebView 那些坑

7.循环使用Masonry约束添加控件到scrollview,控件无法添加成功:

这是因为scrollviewleftrighttopbottom是基于contentsize,而不是bounds,而contentsize基于子控件,所以需要先添加一个子控件。
iOS —masonry设置scrollview的子控件
使用Masonry对UIScrollView自动布局

8.WKWebView无法返回:

这里因为WKWebView的视图是在原来视图的基础上再添加一个视图的,原来的视图被遮盖住了,所以我这里直接使用:

- (void)backView:(UIButton *)button {
    [self.viewScrollView removeFromSuperview];
}

将添加到原视图上的所有视图都移除掉,达到返回的目的。

9.导航栏隐藏问题:

因为推出新的视图我用的是push所以就会出现推出的视图有导航栏的问题,但是我又不想使用这个导航栏,所以我就需要将它隐藏掉。
iOS 导航栏的正确隐藏方式

你可能感兴趣的:(iOS笔记,ios,objective-c,开发语言)