Ios ScrollView没有';t在collectionViewCell中滚动
我正在创建一个拼贴应用程序。我在collectionViewCell中看到的功能与此完全相同: 我到目前为止所做的: 创建了一个自定义collectionViewCell,其中嵌入了UIScrollView,并在scrollView中嵌入了imageView。我已经设置了他们的约束条件。以下是我的collectionViewCell代码:Ios ScrollView没有';t在collectionViewCell中滚动,ios,swift,uicollectionview,uiscrollview,uiimageview,Ios,Swift,Uicollectionview,Uiscrollview,Uiimageview,我正在创建一个拼贴应用程序。我在collectionViewCell中看到的功能与此完全相同: 我到目前为止所做的: 创建了一个自定义collectionViewCell,其中嵌入了UIScrollView,并在scrollView中嵌入了imageView。我已经设置了他们的约束条件。以下是我的collectionViewCell代码: override init(frame: CGRect) { super.init(frame: frame)
override init(frame: CGRect) {
super.init(frame: frame)
// addSubview(scrollView)
insertSubview(scrollView, at: 0)
contentView.isUserInteractionEnabled = true
scrollView.contentMode = .scaleAspectFill
scrollView.translatesAutoresizingMaskIntoConstraints = false
scrollView.addSubview(imageView)
scrollContentView.translatesAutoresizingMaskIntoConstraints = false
scrollView.isScrollEnabled = true
imageView.isUserInteractionEnabled = false
scrollView.delegate = self
scrollView.maximumZoomScale = 5.0
scrollView.backgroundColor = .red
scrollViewDidScroll(scrollView)
// scrollViewWillBeginDragging(scrollView)
let constraints = [
// Scroll View Constraints
scrollView.topAnchor.constraint(equalTo: contentView.topAnchor,constant: 0.0)
scrollView.bottomAnchor.constraint(equalTo: contentView.bottomAnchor,constant: 0.0),
scrollView.trailingAnchor.constraint(equalTo: contentView.trailingAnchor,constant: 0.0),
scrollView.leadingAnchor.constraint(equalTo: contentView.leadingAnchor,constant: 0.0),
// ImageView Constraints
imageView.topAnchor.constraint(equalTo: self.scrollView.topAnchor),
imageView.bottomAnchor.constraint(equalTo: self.scrollView.bottomAnchor),
imageView.trailingAnchor.constraint(equalTo: self.scrollView.trailingAnchor),
imageView.leadingAnchor.constraint(equalTo: self.scrollView.leadingAnchor)
]
NSLayoutConstraint.activate(constraints)
}
我在这里面临的另一个问题是,如果我使用insertSubview()而不是addSubview,我的didselectItemAt的collectionView函数可以正常工作,否则如果我使用addSubview,则不会执行DidSelectItem函数。didSelectItem的代码:
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
if selectedImage[indexPath.row] != UIImage(named: "empty-image") {
collectionViewCellClass.scrollView.isUserInteractionEnabled = true
collectionViewCellClass.scrollViewDidScroll(collectionViewCellClass.scrollView)
collectionViewCellClass.scrollView.showsHorizontalScrollIndicator = true
}else {
collectionViewCellClass.imageView.isUserInteractionEnabled = false
self.currentIndex = indexPath.row
if UIImagePickerController.isSourceTypeAvailable(.photoLibrary){
imagePicker.delegate = self
imagePicker.allowsEditing = false
imagePicker.sourceType = .savedPhotosAlbum
present(imagePicker, animated: true, completion: nil)
}
}
}
CellForItemAt IndexPath的代码:
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! CollectionViewCell
cell.imageView.image = selectedImage[indexPath.item]
// TODO: Round corners of the cell
cell.scrollView.frame = CGRect(x: 0, y: 0, width: cell.frame.size.width, height: cell.frame.size.height)
// cell.scrollView.contentSize = CGSize(width: cell.imageView.image!.size.width * 2, height: cell.imageView.image!.size.height * 2)
cell.scrollView.contentSize = cell.imageView.image?.size ?? .zero
cell.scrollView.contentMode = .center
cell.scrollView.isScrollEnabled = true
// cell.scrollContentView.frame = CGRect(x: 0, y: 0, width: cell.frame.size.width, height: cell.frame.size.height)
cell.imageView.frame = CGRect(x: 0, y: 0, width: cell.imageView.image!.size.width, height: cell.imageView.image!.size.height)
// cell.imageView.clipsToBounds = true
cell.backgroundColor = .black
return cell
}
我已尝试更改ImageView=cell.frame.size的大小,但仍然没有成功,并将scrollView框架的大小也更改为ImageView.image.size,但由于某些原因,scrollView无法滚动。尝试将scrollView添加到单元格内容视图:
self.contentView.addSubview(scrollView)
scrollView.contentSize=imageView.bounds.size我终于找到了解决方案,以下是对我有效的方法:
if selectedImage[indexPath.row] != UIImage(named: "empty-image"){
cell.contentView.isUserInteractionEnabled = true
}else{
cell.contentView.isUserInteractionEnabled = false
}
UIImage(名为“空图像”)是当用户未对其图像进行任何选择时显示的图像。我在cellForItemAt函数中编写了上述代码。另外,我必须将imageView.frame设置为图像的原始宽度和高度
cell.imageView.frame = CGRect(x: 0, y: 0, width: cell.imageView.image!.size.width, height: cell.imageView.image!.size.height)
上述解决方案解决了我的问题。希望它能帮助别人。不起作用。我按照您当时所说的方式执行了didselectItem,因此我将contentView.isUserIterationEnable设置为false,当新图像出现时,我会将其设置为true。但是仍然不起作用,我让didselectwork工作,但是正如你提到的contentView.size应该更大,我将它设置为imageView.image.size,它比scrollView的框架大100%。