我尝试以编程方式设置UICollectionViewLayout
。我也在不使用故事板的情况下使用UICollectionView
,并设置了约束。
我已经关注了这个主题的Ray Wenderlich教程,并进行了一些更改以使代码适应Swift 3(正如AZCoder2做 https://github.com/AZCoder2/Pinterest)。
由于所有这些示例都使用了故事板,我还介绍了一些更改,以创建UICollectionView
及其UICollectionViewLayout
:
collectionViewLayout = PinterestLayout()
collectionViewLayout.delegate = self
collectionView = UICollectionView.init(frame: .zero, collectionViewLayout: collectionViewLayout)
结果:我看不到任何东西。如果我使用Apple提供的UICollectionViewLayout
(UICollectionViewFlowLayout
)更改UICollectionViewLayout
,至少我可以看到包含其内容的单元格。如果我实施一些更改并使用故事板,一切都很好,但这不是我想要实现的方式。整个视图以编程方式进行,集合视图是其中的一部分。
我错过了什么?这与我实例化 Exception in callback: System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.NullReferenceException: Object reference not set to an instance of an object
public class vbScipt : MonoBehaviour, IVirtualButtonEventHandler {
private GameObject vbButtonObject;
private GameObject zombie;
// Use this for initialization
void Start () {
vbButtonObject = GameObject.Find ("actionButton");
zombie = GameObject.Find ("zombie");
vbButtonObject.GetComponent<VirtualButtonAbstractBehaviour> ().RegisterEventHandler (this);
}
public void OnButtonPressed (VirtualButtonAbstractBehaviour vb){
Debug.Log ("Button Pressed");
zombie.GetComponent<Animation> ().Play ();
}
public void OnButtonReleased (VirtualButtonAbstractBehaviour vb){
Debug.Log ("Button Released");
zombie.GetComponent<Animation> ().Stop ();
}
的方式有关吗?我是否必须注册一些东西(例如,我需要注册可重复使用的单元格)?
答案 0 :(得分:3)
如何创建一个为您创建流式布局的变量
var flowLayout: UICollectionViewFlowLayout {
let _flowLayout = UICollectionViewFlowLayout()
// edit properties here
_flowLayout.itemSize = CGSize(width: 98, height: 134)
_flowLayout.sectionInset = UIEdgeInsetsMake(0, 5, 0, 5)
_flowLayout.scrollDirection = UICollectionViewScrollDirection.horizontal
_flowLayout.minimumInteritemSpacing = 0.0
// edit properties here
return _flowLayout
}
然后你可以通过调用变量来设置它。
self.collectionView.collectionViewLayout = flowLayout // after initializing it another way
// or
UICollectionView(frame: .zero, collectionViewLayout: flowLayout)
答案 1 :(得分:1)
我可以做我想做的事情。基本上,按照我在自己的问题中建议的教程,设置集合视图及其视图布局如下:
collectionViewLayout = PinterestLayout()
collectionViewLayout.delegate = self
collectionView = DynamicCollectionView.init(frame: .zero, collectionViewLayout: collectionViewLayout)
请注意,我使用的是DynamicCollectionView
(而不是UICollectionView
)。 Apple不提供此课程:我使用this post中提供的代码创建了自己的课程。
请记住,这种方法是在使用约束以编程方式创建视图时。 (可能还有其他使用案例)
答案 2 :(得分:0)
我认为这会起作用。
override init(collectionViewLayout layout: UICollectionViewLayout) {
super.init(collectionViewLayout: layout)
collectionView?.collectionViewLayout = YourCollectionViewLayout()
}