未调用iOS 13 CollectionView委托方法
我们的应用程序中有这段代码,除iOS 13外,所有版本的iOS都运行良好。在iOS 12及以下版本中,调用cellForItemAt和willDisplayCell等委托方法时不会出现问题,但在iOS 13中,只调用numberOfSections,而不调用其他方法 我在iOS 13中查找了可能导致此问题的API更改,但没有找到任何更改。在iOS 13中,我是否错过了一些让它工作的东西 这是我的密码:未调用iOS 13 CollectionView委托方法,ios,swift,uicollectionview,ios13,Ios,Swift,Uicollectionview,Ios13,我们的应用程序中有这段代码,除iOS 13外,所有版本的iOS都运行良好。在iOS 12及以下版本中,调用cellForItemAt和willDisplayCell等委托方法时不会出现问题,但在iOS 13中,只调用numberOfSections,而不调用其他方法 我在iOS 13中查找了可能导致此问题的API更改,但没有找到任何更改。在iOS 13中,我是否错过了一些让它工作的东西 这是我的密码: class PhotoBrowserView: UIView, UICollectionVie
class PhotoBrowserView: UIView, UICollectionViewDelegateFlowLayout, UICollectionViewDelegate, UICollectionViewDataSource, UIScrollViewDelegate {
var photos: [PhotoURL] = [PhotoURL]() {
didSet {
photoCollectionView.reloadData()
}
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
return self.bounds.size
}
func numberOfSections(in collectionView: UICollectionView) -> Int {
return 1
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "photoCell", for: indexPath)
return cell
}
func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath) {
let cell = cell as! SimplePhotoCell
cell.thumbnailButton.isUserInteractionEnabled = false
cell.thumbnailPath = photos[indexPath.item].photoURL.absoluteString
}
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return photos.count
}
}
这就是我对照片的称呼:
class StoryView: ShowPageView, UIScrollViewDelegate {
private let photosView: PhotoBrowserView = {
return PhotoBrowserView()
}()
override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
super.traitCollectionDidChange(previousTraitCollection)
if self.traitCollection.horizontalSizeClass == .compact, viewModel.story.portraitPhotos.count > 0 {
photosView.photos = viewModel.story.portraitPhotos
} else {
photosView.photos = viewModel.story.landscapePhotos
}
}
}
在以前版本的iOS
traitCollectionDidChange
中,将视图添加到视图层次结构时调用方法,在iOS 13中,UIKit在将视图添加到视图层次结构之前创建视图时设置视图的特征。因此,traitCollectionDidChange
不会被调用,您的照片也不会被设置。如果照片未设置,则不会重新加载collectionView。在以前版本的iOS中,将视图添加到视图层次结构时调用traitCollectionDidChange方法,而在iOS 13中,UIKit会在将视图添加到视图层次结构之前创建视图时设置视图的特征。因此,traitCollectionDidChange
不会被调用,您的照片也不会被设置。如果未设置照片,则不会重新加载collectionView。有关详细信息,请参阅。我将分享他的答案,并添加我自己的答案
如前所述,在iOS 13中,将视图添加到视图层次结构时,不会调用traitCollectionDidChange。它将在设备的后续旋转中调用。在iOS 13之前,在将视图添加到视图层次结构时调用traitCollectionDidChange
iOS 13中的此更改导致在任何旋转之前首次显示视图时,我的所有控件都左对齐。他们在iOS 13之前居中
通过以下操作之一修复代码:
考虑记录为什么你会偏离iOS版本。否则有人会出现,删除你的添加,在旧的iOS版本中出现冗余。你可以考虑为这种变化创造技术债务:
// TODO: When I quit supporting pre iOS 13, this conditional can be removed
if #available(iOS 13, *) {
<whatever solution you chose above>
}
//TODO:当我退出支持iOS 13之前版本时,可以删除此条件
如果可用(iOS 13,*){
}
有关更多详细信息,请参阅。我将分享他的答案并添加我自己的答案
如前所述,在iOS 13中,将视图添加到视图层次结构时不会调用traitCollectionDidChange。它将在设备的后续旋转时调用。在iOS 13之前,将视图添加到视图层次结构时调用traitCollectionDidChange
iOS 13中的此更改导致在任何旋转之前首次显示视图时,我的所有控件都左对齐。它们在iOS 13之前居中
通过以下操作之一修复代码:
考虑记录为什么你会偏离iOS版本。否则有人会出现,删除你的添加,在旧的iOS版本中出现冗余。你可以考虑为这种变化创造技术债务:
// TODO: When I quit supporting pre iOS 13, this conditional can be removed
if #available(iOS 13, *) {
<whatever solution you chose above>
}
//TODO:当我退出支持iOS 13之前版本时,可以删除此条件
如果可用(iOS 13,*){
}
你如何设置你的var照片
?你的照片didset
是否被呼叫?@valosip我已经添加了该代码你如何设置你的var照片
?你的照片didset
是否被呼叫?@valosip我已经添加了该代码