uicollectionview - 数据自动加载而不调用 reloaddata
uicollectionview - data automatically load without calling reloaddata
我有两个问题。
我想知道为什么我的集合视图在不调用 imageCollectionView.reloadData()
的情况下自动加载数据。
已解决。见评论
为什么不调用func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize
?我没有看到 print("collectionViewLayout called")
我正在尝试修改单元格的大小,以便单元格的高度等于集合视图的高度
已解决。见评论
这是代码
class ProductInternalDetailVC: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate {
var selectedProduct: Product?
@IBOutlet weak var imageCollectionView: UICollectionView!
override func viewDidLoad() {
super.viewDidLoad()
imageCollectionView.delegate = self
imageCollectionView.dataSource = self
}
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return 2
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "Cell", for: indexPath as IndexPath) as! ProductInternalDetailCVC
if indexPath.row == 0 {
cell.productImage.image = selectedProduct!.image1
} else {
cell.productImage.image = selectedProduct!.image2
}
cell.productImage.frame = CGRect(x: 1, y: 1, width: cell.frame.size.width-2, height: cell.frame.size.height-2)
return cell
}
func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {
//return CGSize(width: collectionView.frame.size.height-1, height: collectionView.frame.size.height-1)
print("collectionViewLayout called")
return CGSize(width: 10, height: 10)
}
}
class ProductInternalDetailCVC: UICollectionViewCell {
@IBOutlet weak var productImage: UIImageView!
}
感谢您的帮助。
问题2:函数签名有点变化。用这个更改函数签名:
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
...
}
并且不要忘记实施 UICollectionViewDelegateFlowLayout
协议。
问题 1:
当输入 ViewController 时,如果这是您的 question.for 示例,您的 collectionView 会自动加载 collectionView 的数据源,在不更改视图的情况下更改数据源(意味着不调用 viewDidLoad
方法)在调用 imageCollectionView.reloadData()
之前您不会看到更改。
我有两个问题。
我想知道为什么我的集合视图在不调用
imageCollectionView.reloadData()
的情况下自动加载数据。已解决。见评论
为什么不调用
func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize
?我没有看到print("collectionViewLayout called")
我正在尝试修改单元格的大小,以便单元格的高度等于集合视图的高度已解决。见评论
这是代码
class ProductInternalDetailVC: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate {
var selectedProduct: Product?
@IBOutlet weak var imageCollectionView: UICollectionView!
override func viewDidLoad() {
super.viewDidLoad()
imageCollectionView.delegate = self
imageCollectionView.dataSource = self
}
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return 2
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "Cell", for: indexPath as IndexPath) as! ProductInternalDetailCVC
if indexPath.row == 0 {
cell.productImage.image = selectedProduct!.image1
} else {
cell.productImage.image = selectedProduct!.image2
}
cell.productImage.frame = CGRect(x: 1, y: 1, width: cell.frame.size.width-2, height: cell.frame.size.height-2)
return cell
}
func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {
//return CGSize(width: collectionView.frame.size.height-1, height: collectionView.frame.size.height-1)
print("collectionViewLayout called")
return CGSize(width: 10, height: 10)
}
}
class ProductInternalDetailCVC: UICollectionViewCell {
@IBOutlet weak var productImage: UIImageView!
}
感谢您的帮助。
问题2:函数签名有点变化。用这个更改函数签名:
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
...
}
并且不要忘记实施 UICollectionViewDelegateFlowLayout
协议。
问题 1:
当输入 ViewController 时,如果这是您的 question.for 示例,您的 collectionView 会自动加载 collectionView 的数据源,在不更改视图的情况下更改数据源(意味着不调用 viewDidLoad
方法)在调用 imageCollectionView.reloadData()
之前您不会看到更改。