Swift 3 - iOS 11.2上的UICollectionview问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Swift 3 - iOS 11.2上的UICollectionview问题相关的知识,希望对你有一定的参考价值。
我有UICollectionView
的两个问题。以下是场景:
问题1
我有一个在Xcode 8中创建的应用程序。它基于ios 10.3模拟器,一切都很好。但是当我尝试使用iOS 11.2的设备时,我遇到了UICollectionView
的问题。当一个新数据出现时,它应该出现在底部(这就是我想要的并且已经在iOS 10.3上完成了)。但iOS 11.2使其在新数据出现时滚动到顶部。
问题2
然后我已经从Xcode 8迁移到Xcode 9.2,因为Xcode 8没有直接支持iOS 11.但现在在Xcode 9.2 iOS 11.2模拟器上,我无法清楚地滚动集合视图,然后在UIAppDelegate
中使用Thread 1: signal SIGABRT.
中断
只要我知道,每当我断开插座时,就会出现这种错误。但我很确定我的所有网点都已关联。
import UIKit
class cvViewController: UIViewController, UICollectionViewDataSource, UIImagePickerControllerDelegate, UINavigationControllerDelegate, UICollectionViewDelegate {
@IBOutlet var collectionView: UICollectionView!
override func viewDidLoad() {
super.viewDidLoad()
collectionView.delegate = self
collectionView.register(UINib.init(nibName: "Cell", bundle: nil), forCellWithReuseIdentifier: "Cell")
if let flowLayout = collectionView.collectionViewLayout as? UICollectionViewFlowLayout {
flowLayout.estimatedItemSize = CGSize(width: 1,height: 1)
}
loadAPI(Page: 1) //display data
scrollDownButton.clipsToBounds = true
scrollDownButton.layer.cornerRadius = 15
sendButton.addTarget(self, action: #selector(cvViewController.sendMessage), for: .touchDown) //push a new data
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
scheduledTimerWithTimeInterval()
if move == 0{
scrollToBottomAnimated(animated: true)
}
scrollDownButton.addTarget(self, action: #selector(cvchatViewController.scrollToBottomAnimated), for: .touchDown) //it will display last item on screen
flowLayout.scrollDirection = .vertical
}
func scrollToBottomAnimated(animated: Bool) {
guard self.collectionView.numberOfSections > 0 else{
return
}
let items = self.collectionView.numberOfItems(inSection: 0)
if items == 0 { return }
let collectionViewContentHeight = self.collectionView.collectionViewLayout.collectionViewContentSize.height
let isContentTooSmall: Bool = (collectionViewContentHeight < self.collectionView.bounds.size.height)
if isContentTooSmall {
self.collectionView.scrollRectToVisible(CGRect(x: 0, y: collectionViewContentHeight - 1, width: 1, height: 1), animated: animated)
return
}
self.collectionView.scrollToItem(at: NSIndexPath(item: items - 1, section: 0) as IndexPath, at: .bottom, animated: animated)
}
public func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return chatPages.count
}
public func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "Cell", for: indexPath) as! Cell
cell.vNameLabel.text = chatPages[indexPath.row].username
cell.VCDateLabel.text = chatPages[indexPath.row].timeSent
cell.vImageSend.image = UIImage(named: "1x1px")
return cell
}
func shouldInvalidateLayout(forBoundsChange newBounds: CGRect) -> Bool {
return true
}
任何人都可以帮我解决这个问题吗?顺便说一下,我只是Swift的初学者。我感谢您的所有回复。谢谢!
注意:我简化了代码,因为实际的代码非常复杂。
我用collectionView.reloadData()
替换collectionView.reloadSections(IndexSet(integer: 0))
解决了我的问题1。我从UITableview Scrolls to Top on Reload得到了参考
问题2通过删除collectionView.reloadData()
解决
谢谢。
以上是关于Swift 3 - iOS 11.2上的UICollectionview问题的主要内容,如果未能解决你的问题,请参考以下文章
EXC_BAD_ACCESS KERN_INVALID_ADDRESS ios 11.2 swift 4.0
如何解决问题 UIPickerView 致命错误:索引超出范围 [IOS Swift 5.1 Xcode 11.2]
在iPhone 8上的iOS 11.2上运行的离子动态图像,但在iPhone 6上不在11.2上