gpt4 book ai didi

iOS collectionView.sizeForItemAtIndexPath 在 iPhone 6 之前中断

转载 作者:搜寻专家 更新时间:2023-10-30 21:54:10 25 4
gpt4 key购买 nike

我是 iOS 开发的新手,我正在尝试将我在 Android 上的项目移植到 iOS。我正在尝试在代码中构建一个 collectionView 作为实现的一部分。事情是因为 Collection View 中每个单元格中的数据可以是不同的字符串大小,每个单元格可以与其相邻单元格的大小不同。我正在试验附加的代码,但我注意到无论是物理设备还是模拟器中的 iPhone 6,用户界面看起来都符合预期……其他任何东西看起来都非常糟糕。似乎是 sizeForIndexItemAtPath 破坏了它。有什么想法吗?时间差

  import UIKit

class ViewController: UIViewController, UICollectionViewDelegateFlowLayout, UICollectionViewDataSource {

var collectionView: UICollectionView?
var thisCellHeight: CGFloat = 0.0

override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
let screenSize: CGRect = UIScreen.mainScreen().bounds
let screenWidth = screenSize.width
let screenHeight = screenSize.height

var thisWidth = screenWidth - 10

let layout: UICollectionViewFlowLayout = UICollectionViewFlowLayout()
layout.sectionInset = UIEdgeInsets(top: 70, left: 10, bottom: 10, right: 10)
layout.itemSize = CGSize(width: thisWidth, height: 120)
collectionView = UICollectionView(frame: self.view.frame, collectionViewLayout: layout)
//collectionView!.backgroundView?.backgroundColor = UIColor.blueColor()
collectionView!.dataSource = self
collectionView!.delegate = self
collectionView!.registerClass(UICollectionViewCell.self, forCellWithReuseIdentifier: "Cell")
collectionView!.backgroundColor = hexStringToUIColor("#15ADFF")
self.view.addSubview(collectionView!)
}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}

func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return 14
}

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {



let cell = collectionView.dequeueReusableCellWithReuseIdentifier("Cell", forIndexPath: indexPath) as UICollectionViewCell
cell.backgroundColor = UIColor.whiteColor()

var typeLabel = UILabel(frame: CGRectMake(10, 0, 200, 21))
typeLabel.text = "Card Type"
typeLabel.font = typeLabel.font.fontWithSize(20)
cell.addSubview(typeLabel)

var titleLabel = UILabel(frame: CGRectMake(10, 25, 300, 21))

titleLabel.text = "This Is The Article Title. This Is The Article Title. This Is The Article Title. This Is The Article Title."
titleLabel.font = titleLabel.font.fontWithSize(20)
titleLabel.numberOfLines = 0
titleLabel.sizeToFit()
self.thisCellHeight = CGFloat(titleLabel.frame.height)
println("The title text is \(self.thisCellHeight) high")
cell.addSubview(titleLabel)

var authorLabel = UILabel(frame: CGRectMake(10, thisCellHeight + 30, 200, 21))
authorLabel.text = "This Is The Article Author"
authorLabel.font = authorLabel.font.fontWithSize(15)
cell.addSubview(authorLabel)

var timestampLabel = UILabel(frame: CGRectMake(10, thisCellHeight + 50, 200, 21))
timestampLabel.text = "This Is The Timestamp"
timestampLabel.font = timestampLabel.font.fontWithSize(15)
cell.addSubview(timestampLabel)

return cell
}

func hexStringToUIColor (hex:String) -> UIColor {
var cString:String = hex.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet() as NSCharacterSet).uppercaseString

if (cString.hasPrefix("#")) {
cString = cString.substringFromIndex(advance(cString.startIndex, 1))
}

if (countElements(cString) != 6) {
return UIColor.grayColor()
}

var rgbValue:UInt32 = 0
NSScanner(string: cString).scanHexInt(&rgbValue)

return UIColor(
red: CGFloat((rgbValue & 0xFF0000) >> 16) / 255.0,
green: CGFloat((rgbValue & 0x00FF00) >> 8) / 255.0,
blue: CGFloat(rgbValue & 0x0000FF) / 255.0,
alpha: CGFloat(1.0)
)
}

func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {


return CGSizeMake(320, 350)


}



}

最佳答案

您将布局上的项目大小设置为:

layout.itemSize = CGSize(width: thisWidth, height: 120)

而且你也在使用委托(delegate)方法

func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {
return CGSizeMake(320, 350)
}

第一个被第二个覆盖。 layout.itemSize 是每个项目的默认大小,前提是委托(delegate)方法 sizeForItemAtIndexPath 未被覆盖。您正在用看起来完全不同的东西覆盖 layout.itemSize。尝试删除委托(delegate)函数 sizeForItemAtIndexPath,这是否符合您的预期?

关于iOS collectionView.sizeForItemAtIndexPath 在 iPhone 6 之前中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28625990/

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