Что я хочу сделать, так это отобразить UICollectionView внутри UICollectionViewCell, когда эта ячейка выбрана. Я хочу использовать rbcollectionviewinfofolderlayout, чтобы сложить мой просмотр коллекции и показать новый вид коллекции внутри этого. Однако я не уверен, как это реализовать в моем существующем коде. У меня три вида просмотра внутри одного представления. Я скрываю и раскрываю свои взгляды в зависимости от того, какой пользователь делает выбор. Я использую пользовательскую ячейку xib для ячеек внутри своих представлений коллекции, и у меня есть пользовательский метод collectionviewflowlayout, который гарантирует, что всегда будут отображаться только 3 ячейки по ширине устройства.Как использовать rbcollectionviewinfofolderlayout с пользовательским UICollectionViewCell & CollectionViewLayout
Это то, что выглядит мой контроллер представления.
в моем представленииDidLoad Мне нужно установить RBCollectionViewInfoFolderLayout в мой просмотр коллекции. Как вы видите, переменная layout содержит мой CustomCollectionViewFlow
, который я установил как макет представления коллекции, прежде чем я внедрил RBCollectionviewinfofolderlayout.
override func viewDidLoad() {
super.viewDidLoad()
musicLib.loadLibrary()
PlaylistCollectionView.indicatorStyle = UIScrollViewIndicatorStyle.White
AlbumCollectionView.indicatorStyle = UIScrollViewIndicatorStyle.White
ArtistCollectionView.indicatorStyle = UIScrollViewIndicatorStyle.White
layout = CustomCollectionViewFlow()
cview = ArtistCollectionView
let lay: RBCollectionViewInfoFolderLayout = ArtistCollectionView.collectionViewLayout as! RBCollectionViewInfoFolderLayout
lay.cellSize = CGSizeMake(80, 80)
lay.interItemSpacingY = 10
lay.interItemSpacingX = 0
let nib = UINib(nibName: "CollectionViewCell", bundle: nil)
cview.registerClass(UICollectionReusableView.self, forSupplementaryViewOfKind: RBCollectionViewInfoFolderHeaderKind, withReuseIdentifier: "header")
cview.registerClass(UICollectionReusableView.self, forSupplementaryViewOfKind: RBCollectionViewInfoFolderFooterKind, withReuseIdentifier: "footer")
cview.registerClass(collectionViewFolder.self, forSupplementaryViewOfKind: RBCollectionViewInfoFolderFolderKind, withReuseIdentifier: "folder")
cview.registerClass(RBCollectionViewInfoFolderDimple.self, forSupplementaryViewOfKind: RBCollectionViewInfoFolderDimpleKind, withReuseIdentifier: "dimple")
ArtistCollectionView.collectionViewLayout = lay
ArtistCollectionView.registerNib(nib, forCellWithReuseIdentifier: "item")
ArtistCollectionView.dataSource = self
ArtistCollectionView.delegate = self
PlaylistCollectionView.collectionViewLayout = layout
PlaylistCollectionView.registerNib(nib, forCellWithReuseIdentifier: "item")
PlaylistCollectionView.dataSource = self
AlbumCollectionView.collectionViewLayout = layout
AlbumCollectionView.registerNib(nib, forCellWithReuseIdentifier: "item")
AlbumCollectionView.dataSource = self
}
Мои CustomCollectionViewFlow
выглядит следующим образом
class CustomCollectionViewFlow: UICollectionViewFlowLayout{
override init(){
super.init()
setupLayout()
}
required init?(coder aDecoder: NSCoder){
super.init(coder: aDecoder)
setupLayout()
}
override var itemSize: CGSize {
set {
}
get {
let numberOfColumns: CGFloat = 3
let itemWidth = (CGRectGetWidth(self.collectionView!.frame) - (numberOfColumns - 1))/numberOfColumns
return CGSizeMake(itemWidth, itemWidth)
}
}
func setupLayout() {
minimumInteritemSpacing = 0
minimumLineSpacing = 0
scrollDirection = .Vertical
}
}
я проведу из по наведению все мои кодирования здесь, как это будет становиться на большой поста и другие methodes являются своего рода неуместным в этой точке , Однако то, что я сделал, - это пример приложения, которое я сделал для этого на git here для тех, кто хочет его проверить.
Это изображение показывает, какое состояние моего просмотра было до того, как я внедрил rbcollectionview. Второе изображение показывает, что я пытаюсь достичь
Это как вид должен выглядеть, когда элемент прослушивают
EDIT
I были в состоянии заставить его работать. Мне удалось показать макет, как я и хотел. Так же, как и у меня, прежде чем я выполнил rbcollectionviewinfofolderlayout. Однако кажется, что когда папка больше, чем размер экрана, она фактически не будет складываться. Он будет складываться на секунду и снова рушиться. Это может быть вызвано макетом, который я реализовал. Ниже приведен код, который отвечает за это.
класс, который отвечает за мой макет
class RBCollectionLayout: RBCollectionViewInfoFolderLayout
{
var view: UIView!
init(view: UIView){
super.init()
self.view = view
setupLayout()
}
override init(){
super.init()
setupLayout()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
setupLayout()
}
func setupLayout(){
let numberofItems: CGFloat = 3
let itemWidth = (CGRectGetWidth(view.frame))/numberofItems
cellSize = CGSizeMake(itemWidth, itemWidth)
interItemSpacingX = 0
interItemSpacingY = 0
}
}
Метод, который рассчитает желаемая с тем, когда на экране меняется с портретной на ландшафтную
override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()
if(view_artist.hidden == false){
guard let ArtistFlowLayout = ArtistCollectionView.collectionViewLayout as? RBCollectionViewInfoFolderLayout else {
return
}
lay = RBCollectionLayout(view: self.view)
ArtistCollectionView.collectionViewLayout = lay
ArtistFlowLayout.invalidateLayout()
}
}
это как макет быть установить в моем viewdidload
lay = RBCollectionLayout(view: self.view)
ArtistCollectionView.collectionViewLayout = lay
снова весь мой код доступен на моем мерзавца here
У меня есть этот метод. Я посмотрю на это, постараюсь, и посмотрим, удастся ли это исправить, но у меня возникают сомнения. Черт, я, должно быть, забыл нажать на git. Я тоже сделаю это – NoSixties
Я просто нажал код на свой git. Пожалуйста, взгляните на него снова, если сможете, потому что, поскольку я подозревал, что ваше предложение не сделало это для меня, к сожалению – NoSixties
Я только что обновил свой git снова. Я смог создать макет, как это было раньше, в моем макете. У меня ошибка с папкой, складывающейся сейчас, когда ее прослушивают. Похоже, что он работает глючит, когда папка больше, чем экран. Я тоже редактировал свой вопрос. – NoSixties