gpt4 book ai didi

ios - Swift 3 - iOS 11.2 上的 UICollectionview 问题

转载 作者:行者123 更新时间:2023-11-30 11:44:26 25 4
gpt4 key购买 nike

我在使用 UICollectionView 时遇到两个问题。以下是场景:

Problem 1

我有一个在 Xcode 8 中创建的应用程序。它是在 iOS 10.3 模拟器上构建的,一切都很好。但是当我在运行 iOS 11.2 的设备上尝试时,UICollectionView 出现了问题。当新数据出现时,它应该出现在底部(这就是我想要的并且已经在 iOS 10.3 上完成)。但 iOS 11.2 让它在新数据出现在底部时滚动到顶部。

Problem 2

然后我从 Xcode 8 迁移到 Xcode 9.2,因为 Xcode 8 没有对 iOS 11 的直接支持。但现在在 Xcode 9.2 iOS 11.2 模拟器上,我无法清楚地滚动 collectionview,然后它在 UIAppDelegate 中中断线程 1:信号 SIGABRT。

据我所知,每当我断开 socket 时就会出现这种错误。但我很确定我的所有 socket 都已连接。

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 得到引用

通过删除 collectionView.reloadData() 解决了问题 2

谢谢。

关于ios - Swift 3 - iOS 11.2 上的 UICollectionview 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48985696/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com