亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > iOS > 正文

iOS使用UICollectionView實現列表頭部拉伸效果

2019-10-21 18:41:11
字體:
來源:轉載
供稿:網友

本文實例為大家分享了iOS實現列表下拉放大效果展示的具體代碼,供大家參考,具體內容如下

先看效果圖

iOS,UICollectionView,列表頭部拉伸

突然發現沒有做出來之前都覺得蠻難的,做出來之后就覺得So Easy 大家都有這樣的感觸吧

做這個就重寫 UICollectionViewFlowLayout 的幾個方法就可以

OC版本

創建一個類 CustomCollectionViewFlowLayout 繼承 UICollectionViewFlowLayout

//// CustomCollectionViewFlowLayout.m// //// Created by GongHui_YJ on 16/8/4.// Copyright © 2016年 Yangjian. All rights reserved.//#import "CustomCollectionViewFlowLayout.h"@implementation CustomCollectionViewFlowLayout- (BOOL)shouldInvalidateLayoutForBoundsChange:(CGRect)newBounds{  return YES;}- (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect {  UICollectionView *collectionView = [self collectionView];  UIEdgeInsets insets = [collectionView contentInset];  CGPoint offset = [collectionView contentOffset];  CGFloat minY = -insets.top;  NSArray *attributes = [super layoutAttributesForElementsInRect:rect];  if (offset.y < minY) {    CGSize headerSize = [self headerReferenceSize];    CGFloat deltaY = fabsf(offset.y - minY);    for (UICollectionViewLayoutAttributes *attrs in attributes) {      if ([attrs representedElementKind] == UICollectionElementKindSectionHeader) {        CGRect headerRect = [attrs frame];        headerRect.size.height = MAX(minY, headerSize.height + deltaY);        headerRect.origin.y = headerRect.origin.y - deltaY;        [attrs setFrame:headerRect];        break;      }    }  }  return attributes;}@end

在控制器中使用 先導入頭文件

// 創建collectionView  CustomCollectionViewFlowLayout *flowLayout=[[CustomCollectionViewFlowLayout alloc] init];  [flowLayout setSectionInset:UIEdgeInsetsMake(0, 0, 10, 0)];  [flowLayout setItemSize:CGSizeMake(kScreenWidth / collectionCellW, kScreenWidth / collectionCellW)];  [flowLayout setHeaderReferenceSize:CGSizeMake(kScreenWidth, userInfoImageViewH)];  [flowLayout setFooterReferenceSize:CGSizeMake(kScreenWidth, 83)];  [flowLayout setScrollDirection:UICollectionViewScrollDirectionVertical];  [flowLayout setMinimumInteritemSpacing:0.0];  [flowLayout setMinimumLineSpacing:0.0];  self.homeCollectionView = [[UICollectionView alloc]initWithFrame:CGRectMake(0, 0, kScreenWidth, kScreenHeight - 44)collectionViewLayout:flowLayout];  self.homeCollectionView.backgroundColor = kViewBackgroundColor;  self.homeCollectionView.alwaysBounceVertical = YES;  self.homeCollectionView.showsVerticalScrollIndicator = NO;  //設置代理  self.homeCollectionView.delegate = self;  self.homeCollectionView.dataSource = self;  [self.view addSubview:self.homeCollectionView];  // 注冊表頭  [self.homeCollectionView registerClass:[YJHeaderCollectionReusableView class] forSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:kCollectionHeaderView];  // 注冊表尾  [self.homeCollectionView registerClass:[UICollectionReusableView class] forSupplementaryViewOfKind:UICollectionElementKindSectionFooter withReuseIdentifier:kCollectionFooterView];

Swift版

喜歡swift 不需要導入頭文件那么麻煩

//// CustomCollectionViewFlowLayout.swift// //// Created by GongHui_YJ on 16/8/4.// Copyright © 2016年YangJian. All rights reserved.//import UIKitclass CustomCollectionViewFlowLayout: UICollectionViewFlowLayout {  override func shouldInvalidateLayoutForBoundsChange(newBounds: CGRect) -> Bool {    return true  }  override func layoutAttributesForElementsInRect(rect: CGRect) -> [UICollectionViewLayoutAttributes]? {    let collectionView = self.collectionView    let insets = collectionView?.contentInset    let offset = collectionView?.contentOffset    let minY = -((insets?.top)!)    let attributesArray = super.layoutAttributesForElementsInRect(rect)    if offset!.y < minY {      let headerSize = self.headerReferenceSize      let deltaY = CGFloat(fabsf(Float((offset?.y)! - CGFloat(minY))))      for attrs:UICollectionViewLayoutAttributes in attributesArray! {        if attrs.representedElementKind == UICollectionElementKindSectionHeader {          var headerRect = attrs.frame          headerRect.size.height = max(minY, headerSize.height + deltaY)          headerRect.origin.y = headerRect.origin.y - deltaY          attrs.frame = headerRect          break        }      }    }    return attributesArray  }}

在控制器 viewDidLoad方法實現

let customFlowLayout = CustomCollectionViewFlowLayout()  customFlowLayout.headerReferenceSize = CGSizeMake(kScreenWidth, 203)  customFlowLayout.footerReferenceSize = CGSizeMake(kScreenWidth, 83)  customFlowLayout.minimumInteritemSpacing = 0  customFlowLayout.minimumLineSpacing = 0  customFlowLayout.itemSize = CGSizeMake(kScreenWidth / 3.000006, kScreenWidth / 3.00006)  customFlowLayout.sectionInset = UIEdgeInsetsMake(0, 0, 10, 0)  self.homeCollectionView.setCollectionViewLayout(customFlowLayout, animated: true)  self.homeCollectionView.backgroundColor = kViewBackgroundColor  self.homeCollectionView.alwaysBounceVertical = true  let nib = UINib(nibName: "CommonCollectionViewCell", bundle: nil)  self.homeCollectionView.registerNib(nib, forCellWithReuseIdentifier: cellId)  // 注冊表頭表尾  let headerNib = UINib(nibName: "HeaderCollectionReusableView", bundle: nil)  self.homeCollectionView.registerNib(headerNib, forSupplementaryViewOfKind: UICollectionElementKindSectionHeader, withReuseIdentifier: collectionHeaderId)  self.homeCollectionView.registerClass(UICollectionReusableView.classForCoder(), forSupplementaryViewOfKind: UICollectionElementKindSectionFooter, withReuseIdentifier: collectionFooterId)

注:不要實現UICollectionViewDelegateFlowLayout的代理方法了。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到IOS開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
…久久精品99久久香蕉国产| 亚洲美女av在线| 国产一区二区成人| 午夜精品www| 亚洲欧美成人精品| 91亚洲精华国产精华| 九九精品在线观看| 97香蕉久久超级碰碰高清版| 91国产视频在线| 热久久这里只有| 日韩中文综合网| 亚洲欧美国产一区二区三区| 欧美精品www| 欧美日韩一区二区免费视频| 中文字幕亚洲综合久久筱田步美| 午夜精品久久久久久久男人的天堂| 中文字幕在线亚洲| 日韩的一区二区| 亚洲精品国产欧美| 国产婷婷成人久久av免费高清| 久久久久久综合网天天| 久久在线精品视频| 欧美日韩第一视频| 欧美精品免费在线观看| 亚洲影视中文字幕| 日韩成人在线视频网站| 成人免费网站在线看| 亚洲精品免费av| 91精品国产综合久久久久久久久| 奇米一区二区三区四区久久| 亚洲三级av在线| 欧美理论在线观看| 日韩中文字幕在线播放| 国产日韩在线一区| 亚洲www永久成人夜色| 国产欧美一区二区三区视频| 夜色77av精品影院| 国产精品成人免费电影| …久久精品99久久香蕉国产| 欧美激情视频一区二区三区不卡| 亚洲国产成人爱av在线播放| 欧美激情视频网| 亚洲美女中文字幕| 精品久久香蕉国产线看观看亚洲| 伊人亚洲福利一区二区三区| 欧美性生交xxxxx久久久| 伦伦影院午夜日韩欧美限制| 亚洲欧美日韩图片| 日韩小视频在线| 青青草原一区二区| 91最新国产视频| 亚洲国产日韩欧美综合久久| 欧美区二区三区| 国产97人人超碰caoprom| 色妞欧美日韩在线| 国产a∨精品一区二区三区不卡| 久久99精品久久久久久噜噜| 日韩欧美一区二区三区久久| 亚洲影影院av| 亚洲高清av在线| www亚洲精品| 国产欧美亚洲视频| 日韩成人在线免费观看| 欧美日韩国产精品一区二区三区四区| 国产精品偷伦免费视频观看的| 亚洲色图狂野欧美| 亚洲色图激情小说| 久久天天躁狠狠躁夜夜av| 国产噜噜噜噜久久久久久久久| 国产精品一区二区在线| 亚洲欧美中文字幕在线一区| 欧美交受高潮1| 欧美一级成年大片在线观看| 久久天天躁狠狠躁夜夜爽蜜月| 日韩精品久久久久久福利| 成人免费网站在线| 亚洲成av人乱码色午夜| 综合av色偷偷网| 国产日韩精品一区二区| 国产不卡一区二区在线播放| 国产欧美精品在线播放| 欧美黑人极品猛少妇色xxxxx| 久久久精品免费| 精品爽片免费看久久| 日韩中文av在线| 中文字幕久久久av一区| 668精品在线视频| 97国产精品久久| 成人精品视频在线| 国产有码在线一区二区视频| 97精品欧美一区二区三区| 亚洲人成网站999久久久综合| 色噜噜狠狠狠综合曰曰曰| 色综合久久久888| 欧美极品美女电影一区| 亚洲电影免费观看高清完整版在线观看| 亚洲日本aⅴ片在线观看香蕉| 日本不卡免费高清视频| 精品久久久久久中文字幕大豆网| 亚洲成人在线网| 成人av色在线观看| 亚洲综合在线做性| 精品久久久香蕉免费精品视频| 久久久久久久999精品视频| 91高清免费在线观看| 一区二区三区 在线观看视| 色yeye香蕉凹凸一区二区av| 日韩欧美在线观看| 日韩在线视频播放| 欧美在线观看网址综合| 国产一区玩具在线观看| 一区二区在线视频播放| 亚州欧美日韩中文视频| 亚洲成人999| 亚洲欧美福利视频| 欧美黑人xxxⅹ高潮交| 亚洲性夜色噜噜噜7777| 国产精品一区二区久久国产| 日产日韩在线亚洲欧美| 2020久久国产精品| 日韩欧美aⅴ综合网站发布| 欧美大片欧美激情性色a∨久久| 欧美一区二区影院| 97涩涩爰在线观看亚洲| 日韩精品视频免费| 91国产中文字幕| 欧美成人高清视频| 精品二区三区线观看| 久久久久久免费精品| 欧美在线精品免播放器视频| 国产一区二区三区直播精品电影| 亚洲区一区二区| 亚洲视频专区在线| 另类色图亚洲色图| 久久成人这里只有精品| 国产香蕉一区二区三区在线视频| 亚洲第一区第二区| 国产精品人成电影在线观看| 精品久久中文字幕| 久久国产加勒比精品无码| 亚洲精品美女在线| 色樱桃影院亚洲精品影院| 午夜精品福利视频| 精品毛片网大全| 色无极亚洲影院| 国产美女被下药99| 欧美激情综合色| 日韩欧美精品网址| 久久综合网hezyo| 懂色av影视一区二区三区| 亚洲欧美国产精品va在线观看| 亚洲欧美日韩久久久久久| 国产精品中文字幕在线观看| 国产一区二区精品丝袜| 不卡av日日日| 91亚洲国产成人精品性色| 久久天堂电影网| 久久久国产影院| 色偷偷噜噜噜亚洲男人的天堂| 国产91在线播放| 精品国产老师黑色丝袜高跟鞋| 欧美国产亚洲精品久久久8v| 欧美亚洲国产视频小说| 亚洲欧洲美洲在线综合|