Tôi là người mới bắt đầu phát triển iOS và tôi đang cố gắng chuyển một dự án tôi có trên Android sang iOS. Tôi đang cố gắng để xây dựng một collectionView trong mã như là một phần của việc thực hiện. Điều này giống như dữ liệu trong mỗi ô trong chế độ xem bộ sưu tập có thể là kích thước chuỗi khác nhau mỗi ô có thể là kích thước khác với hàng xóm của nó. Tôi đang thử nghiệm với các mã kèm theo nhưng tôi đã nhận thấy rằng với một iPhone 6 hoặc là một thiết bị vật lý hoặc trong giả lập giao diện người dùng trông như mong đợi .. bất cứ điều gì khác nó trông khủng khiếp bị hỏng. Nó có vẻ là sizeForIndexItemAtPath đang phá vỡ nó. Có ý kiến gì không? TIAiOS collectionView.sizeForItemAtIndexPath Break On Anything Trước iPhone 6
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)
}
}
Bạn có thể giải thích (có lẽ ảnh chụp màn hình) về những gì bạn mong đợi so với những gì bạn thấy không? – Alex
Bạn sẽ tin điều đó ... Tôi đã làm việc vào tối hôm qua và từ bỏ trong ngày. Tôi vừa mở Xcode để chụp ảnh màn hình và mã hiện đang hoạt động ... –
Tôi đã sửa nó trong khi bạn đang ngủ. Tôi đã viết bình luận đó để nhắc bạn mở Xcode. – Alex