大橙子网站建设,新征程启航

为企业提供网站建设、域名注册、服务器等服务

iOS开发之KVO机制的妙用-创新互联

压抑不住激动得心情,趁着今天时间多,我就全部拿来写博客好了,当然,不吹牛逼了。吹多了,写不出来代码怎么办呢。

浈江ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为创新互联的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:028-86922220(备注:SSL证书合作)期待与您的合作!

前言:还记得当我接到自己第一个项目的时候,首页的collectionview的frame一直定不好,总会出现collectionview太大了,或者底层的scrollview的contentsize太小了。这些通过小调frame都可以实现不会挡住。但是,后来当客户提出要加上热卖推荐字段的时候 我就懵了。怎么来实现呢,还要保证在collectionview底部有------END-----字段。这些通过小调frame就不能实现了。终于,借鉴前辈的方法,用KVO机制,巧妙的解决了这个难题。

正文:

iOS开发之KVO机制的妙用

iOS开发之KVO机制的妙用

PS:小弟刚写,不知道如何调节大小,望见谅,见谅哈。

应该不难看出图中的collectionVIew的大小事动态改变的吧。

这里,在我们准备在self.view中加入collectionview视图的时候,可以用interfacebuilder来画出图中的热卖推荐字段与end字段。再在两个字的中间拉入一个collectionview定好他的约束。

然后在我们的实现代码文件中,在viewwillappear中初始化一个观察者:

[contentcollectionView addObserver:self forKeyPath:@"contentSize" options:NSKeyValueObservingOptionNew context:@"RecommendProductcontentsize"];

然后在viewwilldisappear中移除观察者:

   if (isRem) {

    @try {

      [contentcollectionView removeObserver:self forKeyPath:@"contentSize"];

    }

    @catch (NSException *exception) {

      NSLog(@"%@",exception);

    }

    @finally {

    }

  }

然后实现回调回调方法:

-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {

  if ([keyPath isEqualToString:@"contentSize"]) {

    CGSize size;

    [change[@"new"] getValue:&size];

    recommendationView.frame = CGRectMake(0, 370+4, centerView.bounds.size.width, size.height+122);

    scrollView.contentSize = CGSizeMake(centerView.frame.size.width, recommendationView.frame.origin.y+recommendationView.frame.size.height);

  }else{

    NSLog(@"添加观察者出错");

  }

}

在这里面我们设定了我们热卖推荐字段的frame与scrollview的contentsize。

size为改变后collectionview的高度。

 这样我们就能实现我们想要达到的效果啦。

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


本文题目:iOS开发之KVO机制的妙用-创新互联
URL网址:http://dzwzjz.com/article/dopsso.html
在线咨询
服务热线
服务热线:028-86922220
TOP