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

首頁 > 編程 > Swift > 正文

iOS Swift UICollectionView橫向分頁滾動,cell左右排版問題詳解

2020-03-09 17:42:51
字體:
來源:轉載
供稿:網友

情況

Swift對于一門新的iOS編程語言,他的崛起是必然的,我們這群老程序員們學習新的技能也是必然的,不接受新技能將被這大群體無情的淘汰。

最近因為工作的需求,在做表情鍵盤時遇到一個問題,我用UICollectionView來布局表情,使用橫向分頁滾動,但在最后一頁出現了如圖所示的情況

uicollectionview,分頁,swift,自定義cell

情況分析圖

是的,現在的item分布就是這個鬼樣子

uicollectionview,分頁,swift,自定義cell

現在想要做的,就是將現在這個鬼樣子變成另外一種樣子,如圖

uicollectionview,分頁,swift,自定義cell

那怎么辦?只好重新布局item了

解決方案

我是自定了一個Layout(LXFChatEmotionCollectionLayout) ,讓UICollectionView在創建的時候使用了它

在 LXFChatEmotionCollectionLayout.swift/292074.html">swift 中

添加一個屬性來保存所有item的attributes

// 保存所有item的attributesfileprivate var attributesArr: [UICollectionViewLayoutAttributes] = []

重新布局

// MARK:- 重新布局override func prepare() { super.prepare()  let itemWH: CGFloat = kScreenW / CGFloat(kEmotionCellNumberOfOneRow)  // 設置itemSize itemSize = CGSize(width: itemWH, height: itemWH) minimumLineSpacing = 0 minimumInteritemSpacing = 0 scrollDirection = .horizontal  // 設置collectionView屬性 collectionView?.isPagingEnabled = true collectionView?.showsHorizontalScrollIndicator = false collectionView?.showsVerticalScrollIndicator = true let insertMargin = (collectionView!.bounds.height - 3 * itemWH) * 0.5 collectionView?.contentInset = UIEdgeInsetsMake(insertMargin, 0, insertMargin, 0)  /// 重點在這里 var page = 0 let itemsCount = collectionView?.numberOfItems(inSection: 0) ?? 0 for itemIndex in 0..<itemsCount {  let indexPath = IndexPath(item: itemIndex, section: 0)  let attributes = UICollectionViewLayoutAttributes(forCellWith: indexPath)    page = itemIndex / (kEmotionCellNumberOfOneRow * kEmotionCellRow)  // 通過一系列計算, 得到x, y值  let x = itemSize.width * CGFloat(itemIndex % Int(kEmotionCellNumberOfOneRow)) + (CGFloat(page) * kScreenW)  let y = itemSize.height * CGFloat((itemIndex - page * kEmotionCellRow * kEmotionCellNumberOfOneRow) / kEmotionCellNumberOfOneRow)    attributes.frame = CGRect(x: x, y: y, width: itemSize.width, height: itemSize.height)  // 把每一個新的屬性保存起來  attributesArr.append(attributes) }}

返回所有當前可見的Attributes

override func layoutAttributesForElements(in rect: CGRect) -> [UICollectionViewLayoutAttributes]? { var rectAttributes: [UICollectionViewLayoutAttributes] = [] _ = attributesArr.map({  if rect.contains($0.frame) {   rectAttributes.append($0)  } }) return rectAttributes}

大功告成

uicollectionview,分頁,swift,自定義cell

完整代碼

import UIKitlet kEmotionCellNumberOfOneRow = 8let kEmotionCellRow = 3class LXFChatEmotionCollectionLayout: UICollectionViewFlowLayout { // 保存所有item fileprivate var attributesArr: [UICollectionViewLayoutAttributes] = []  // MARK:- 重新布局 override func prepare() {  super.prepare()    let itemWH: CGFloat = kScreenW / CGFloat(kEmotionCellNumberOfOneRow)    // 設置itemSize  itemSize = CGSize(width: itemWH, height: itemWH)  minimumLineSpacing = 0  minimumInteritemSpacing = 0  scrollDirection = .horizontal    // 設置collectionView屬性  collectionView?.isPagingEnabled = true  collectionView?.showsHorizontalScrollIndicator = false  collectionView?.showsVerticalScrollIndicator = true  let insertMargin = (collectionView!.bounds.height - 3 * itemWH) * 0.5  collectionView?.contentInset = UIEdgeInsetsMake(insertMargin, 0, insertMargin, 0)    var page = 0  let itemsCount = collectionView?.numberOfItems(inSection: 0) ?? 0  for itemIndex in 0..<itemsCount {   let indexPath = IndexPath(item: itemIndex, section: 0)   let attributes = UICollectionViewLayoutAttributes(forCellWith: indexPath)      page = itemIndex / (kEmotionCellNumberOfOneRow * kEmotionCellRow)   // 通過一系列計算, 得到x, y值   let x = itemSize.width * CGFloat(itemIndex % Int(kEmotionCellNumberOfOneRow)) + (CGFloat(page) * kScreenW)   let y = itemSize.height * CGFloat((itemIndex - page * kEmotionCellRow * kEmotionCellNumberOfOneRow) / kEmotionCellNumberOfOneRow)      attributes.frame = CGRect(x: x, y: y, width: itemSize.width, height: itemSize.height)   // 把每一個新的屬性保存起來   attributesArr.append(attributes)  }   }  override func layoutAttributesForElements(in rect: CGRect) -> [UICollectionViewLayoutAttributes]? {  var rectAttributes: [UICollectionViewLayoutAttributes] = []  _ = attributesArr.map({   if rect.contains($0.frame) {    rectAttributes.append($0)   }  })  return rectAttributes } }

附上相關項目:Swift 3.0 高仿微信

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VEVB武林網的支持。


注:相關教程知識閱讀請移步到swift教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久av红桃一区二区小说| 91精品国产色综合久久不卡98口| 91po在线观看91精品国产性色| 国产精品美女午夜av| 日韩欧美国产黄色| 国产精品va在线播放| 久久亚洲国产精品成人av秋霞| 51ⅴ精品国产91久久久久久| 国产原创欧美精品| 性色av香蕉一区二区| 午夜精品一区二区三区在线| 隔壁老王国产在线精品| 97在线视频免费| 欧美亚洲另类激情另类| 97视频网站入口| 成人精品一区二区三区电影免费| 中文字幕亚洲精品| 日本免费久久高清视频| 日韩中文字幕免费视频| 国产精品第一视频| 欧美人在线观看| 精品久久久久久中文字幕大豆网| 亚洲精品自产拍| 亚洲va码欧洲m码| 综合激情国产一区| 亚洲国产一区二区三区四区| 亚洲精品久久久久久久久| 欧美激情精品久久久| 2019精品视频| 欧美日韩国产精品一区二区三区四区| 亚洲人精选亚洲人成在线| 亚洲最大的成人网| 亚洲国产小视频在线观看| 日韩欧美在线字幕| www.日韩免费| 色爱av美腿丝袜综合粉嫩av| 久久久精品一区二区三区| 国产91在线播放九色快色| 亚洲日本中文字幕免费在线不卡| 亚洲色图五月天| 国产91成人video| 久久精品国产亚洲一区二区| 日韩美女av在线免费观看| 亚洲欧美日韩国产成人| 538国产精品一区二区在线| 一区二区三区四区视频| 永久免费毛片在线播放不卡| 欧美刺激性大交免费视频| 国产亚洲欧洲黄色| 国产精品自产拍在线观看| 高潮白浆女日韩av免费看| 国产三级精品网站| 久久综合九色九九| 欧美午夜视频一区二区| 亚洲精品国产精品乱码不99按摩| 亚洲国产精品大全| 国产精品视频网站| 欧美高清性猛交| 91在线观看免费高清| 久久视频精品在线| 中文字幕日韩在线播放| 亚洲xxx大片| 18性欧美xxxⅹ性满足| 91啪国产在线| 欧美日韩中文在线观看| 亚洲无线码在线一区观看| 尤物yw午夜国产精品视频| 国产91在线高潮白浆在线观看| 欧美极度另类性三渗透| 色樱桃影院亚洲精品影院| 日韩精品极品在线观看| 成人午夜在线影院| 欧洲午夜精品久久久| 精品国产老师黑色丝袜高跟鞋| 九九视频直播综合网| 奇米成人av国产一区二区三区| 俺也去精品视频在线观看| 91视频免费在线| 一区二区三区 在线观看视| 日韩暖暖在线视频| 欧美超级免费视 在线| 欧美日韩在线影院| 97视频在线观看亚洲| 狠狠做深爱婷婷久久综合一区| 欧美激情极品视频| 成人免费看吃奶视频网站| 欧美精品久久久久久久免费观看| 米奇精品一区二区三区在线观看| 亚洲成avwww人| 日韩在线不卡视频| 国产精品一区二区性色av| 91超碰caoporn97人人| 中文字幕精品—区二区| 自拍偷拍亚洲精品| 在线日韩日本国产亚洲| 精品偷拍各种wc美女嘘嘘| 亚洲一区二区三区久久| 色先锋资源久久综合5566| 欧美激情区在线播放| 日韩av免费在线播放| 欧美天堂在线观看| 欧美日韩电影在线观看| 欧美电影免费观看电视剧大全| 精品国产成人在线| 69视频在线播放| 国产不卡在线观看| www.日韩不卡电影av| 久久亚洲综合国产精品99麻豆精品福利| www.久久撸.com| 国产精品电影网| 在线电影欧美日韩一区二区私密| 亚洲色图17p| 国产精品久久久| 亚洲欧美一区二区三区情侣bbw| 午夜精品三级视频福利| 亚洲午夜未满十八勿入免费观看全集| 久久精品亚洲精品| 亚洲一区二区久久久| 国产精品久久久久久久久久久新郎| 欧美一级电影在线| 日韩在线观看视频免费| 精品日韩中文字幕| 国产精品久久久久久久久借妻| 中文字幕一精品亚洲无线一区| 国产啪精品视频网站| 亚洲国模精品私拍| 色狠狠久久aa北条麻妃| 国语自产精品视频在线看一大j8| 国产91久久婷婷一区二区| 亚洲午夜小视频| 国语自产偷拍精品视频偷| 欧美日韩国产页| 亚洲精品网站在线播放gif| 欧美精品video| 欧美一级免费看| 国产精品美女久久久久久免费| 美乳少妇欧美精品| 中文字幕视频在线免费欧美日韩综合在线看| 精品久久久久久亚洲国产300| 久久国产精品网站| 日韩成人久久久| 欧美成人激情在线| 亚洲电影免费观看高清完整版在线观看| 亚洲成人av在线播放| 成人免费高清完整版在线观看| 韩国19禁主播vip福利视频| 中文字幕亚洲综合| 亚洲欧美自拍一区| 亚洲精品www| 国产九九精品视频| 欧美成人精品一区二区三区| 久久久久久久久久久91| 亚洲精品在线不卡| 欧美亚洲国产视频小说| 久久亚洲综合国产精品99麻豆精品福利| 国产亚洲精品综合一区91| 欧美电影免费播放| 欧美激情手机在线视频| 欧美大片免费观看在线观看网站推荐| 青青精品视频播放| 欧美成人午夜激情视频| 欧美日韩一区二区在线播放| 日韩精品高清视频| 国产一区二区av|