2017-04-14 44 views
0

這是我收集觀察室自定義類:編程方式添加的UIImage到收集觀察室

import UIKit 

class NavBarCell: UICollectionViewCell { 

    var avatarImageView: UIImageView = { 
     var avatarView = UIImageView() 
     avatarView.contentMode = .scaleAspectFit 

     return avatarView 
    }() 

    override init(frame: CGRect) { 
     super.init(frame: frame) 

     avatarImageView = UIImageView() 
     contentView.addSubview(avatarImageView) 
    } 

    required init?(coder aDecoder: NSCoder) { 
     fatalError("init(coder:) has not been implemented") 
    } 

} 
在我的控制器的 viewDidLoad

然後,我有

let layout:UICollectionViewFlowLayout = UICollectionViewFlowLayout.init() 
    navBarCollectionView.setCollectionViewLayout(layout, animated: true) 
    navBarCollectionView.backgroundColor = UIColor.clear 
    navBarCollectionView.register(NavBarCell.self, forCellWithReuseIdentifier: "cell") 
    navBarCollectionView.delegate = self 
    navBarCollectionView.dataSource = self 
    layout.scrollDirection = .horizontal 
    self.navigationController?.navigationBar.addSubview(navBarCollectionView) 
    navBarCollectionView.reloadData() 

而在cellForItem我:

 let navBarCell = (collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath)) as! NavBarCell 

     var image : UIImage = UIImage(named: "TestImage")! 
     navBarCell.avatarImageView.image = image 
     navBarCell.avatarImageView.layer.borderWidth = 1 
     navBarCell.avatarImageView.layer.borderColor = UIColor.getRandomColor().cgColor 
     navBarCell.avatarImageView.layer.cornerRadius = 20 

     return navBarCell 

但圖像視圖不顯示。如果我添加navBarCell.backgroundColor = UIColor.red,那麼單元顯示出來,但不是圖像。

任何我失蹤,或不正確實施?

+1

您需要設置'avatarImageView'的初始化幀。如果你想讓imageView縮放到單元格框架,可以在'cellForItem'處重置框架或使用約束。 – Ayazmon

回答

2

UICollectionViewCell已經是一個視圖,你可以直接添加avatarImageView它:

addSubview(avatarImageView) 

您還可以設置約束,例如:

avatarImageView.translatesAutoresizingMaskIntoConstraints = false 
avatarImageView.topAnchor.constraint(equalTo: topAnchor).isActive = true 
avatarImageView.leftAnchor.constraint(equalTo: leftAnchor).isActive = true 
avatarImageView.rightAnchor.constraint(equalTo: rightAnchor).isActive = true 
avatarImageView.heightAnchor.constraint(equalToConstant: 300).isActive = true 
+0

完美,謝謝。我沒有意識到你可以直接添加子視圖。現在好了,再次感謝! – KingTim

+0

這不太對。您應該將圖像視圖添加到單元格的「contentView」中,而不是單元格本身,就像在問題代碼中所做的一樣。 – rmaddy

0

最佳做法是創建原型單元格並在界面構建器中添加圖像視圖。在這個特定的場景中,我認爲錯誤在於你沒有設置圖片視圖的框架來縮放到你的單元格框架。

嘗試打印出您的圖像視圖的框架,它可能會顯示0,0,0,0。