2015-02-20 16 views
7

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) 


    } 



} 
+0

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

+0

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 ... –

+0

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

Trả lời

9

Bạn đang đặt kích thước mục trên bố trí là:

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

Và bạn cũng đang sử dụng phương pháp đại biểu

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

Đầu tiên đã được ghi đè bởi thư hai. layout.itemSize là kích thước mặc định cho mỗi mục, nếu phương thức ủy nhiệm sizeForItemAtIndexPath không bị ghi đè. Bạn đang ghi đè số layout.itemSize bằng thứ gì đó trông hoàn toàn khác. Hãy thử chỉ cần xóa chức năng ủy nhiệm sizeForItemAtIndexPath, điều này có làm những gì bạn mong đợi không?

Các vấn đề liên quan