2017-12-23 24 views
1

Ich frage mich, wie die Einschränkungen dafür geeignet sein sollen. Ich habe eine Sammlungsansicht in einer Tabellenansichtszelle, um zwischen Bildern zu blättern, die der Benutzer veröffentlicht. Jeder Post (Tabellenansichtszelle) kann mehrere Bilder enthalten (die jeweils in der Sammlungsansicht veröffentlicht werden). Ich bin für einen ähnlichen Stil wie Instagram hat, wo Sie zwischen den Bildern wischen können. Das Problem, das ich habe, ist, wenn ich Beschränkungen für die Sammlungsansicht und die Bildansicht festlege, die sie zwischen Geräten nicht ändern. Es scheint, als wäre die einzige Möglichkeit, die Größe der Zellen für die Sammlungsansicht und die Bildansicht manuell zu ändern, je nachdem, welches Gerät der Benutzer verwendet. Jeder alternative Weg, um das Aussehen zu erreichen, das ich zu erreichen versuche, würde auch geschätzt werden.Ordnungsgemäße Möglichkeit zum Festlegen von Einschränkungen der Sammlungsansicht innerhalb der Tabellenansichtszelle

Here are the constraints set on the collection view

Hier sind die auf der Sammlung Ansicht verwenden Einschränkungen

enter image description here

Hier ist, wie die Post auf einem iPhone SE

enter image description here

Hier ist, wie das aussieht Post soll auf dem iPhone 8 Plusaussehenenter image description here

Gesamtpost auf dem Storyboard in Interface Builder. enter image description here

Hier sind die Einschränkungen für das Bild, das sich in der Sammlungsansicht befindet.

Antwort

0

ich die Antwort zu schätzen wissen, die Art, wie ich das Problem durch Ändern der Größe der Sammlung Sichtzelle mit diesem Code

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { return CGSize(width: UIScreen.main.bounds.width, height: 346) }

Ich erkannte, war gelöst, die Bildeinschränkungen waren an der Zelle und es gibt keine Möglichkeit, Einschränkungen für die Zelle selbst festzulegen, also müssen Sie die Größe der Zelle ändern, damit das Bild vergrößert oder verkleinert wird.

1

Schritt 1: Erstellen Sie eine UITableviewCell (wie Like InstagramViewCell), die Sammlungsansicht enthält.

import UIKit 

class InstagramViewCell: UITableViewCell { 

    @IBOutlet weak var innerCellView:innerCell! 
    @IBOutlet weak var collectionView: UICollectionView! 

    var totalElements = 0 

    override func awakeFromNib() { 

    super.awakeFromNib() 

    let flowLayout = UICollectionViewFlowLayout.init() 
    flowLayout.itemSize = CGSize.init(width: self.frame.size.width, height: self.frame.size.height) 
    flowLayout.scrollDirection = .horizontal 
    self.collectionView?.collectionViewLayout = flowLayout 

    self.collectionView.delegate = self 
    self.collectionView.dataSource = self 
    self.collectionView.register(UINib.init(nibName: "ImageCollectionViewCell", bundle: nil), forCellWithReuseIdentifier: "ImageCollectionViewCell") 

    } 

    override func setSelected(_ selected: Bool, animated: Bool) { 
    super.setSelected(selected, animated: animated) 

    // Configure the view for the selected state 
    } 

    func setInformation(_ numberOFCell : Int, _ information : NSDictionary) { 
    self.totalElements = numberOFCell 
    self.collectionView.reloadData() 
    } 

} 

extension InstagramViewCell:UICollectionViewDelegateFlowLayout,UICollectionViewDataSource { 

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { 
     return CGSize.init(width: self.frame.size.width, height: self.frame.size.height) 
    } 

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat { 
     return 0 
    } 

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat { 
     return 0 
    } 

    func numberOfSections(in collectionView: UICollectionView) -> Int { 
     return 1 
    } 

    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 

     return self.totalElements 

    } 
    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 

     let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "ImageCollectionViewCell", for: indexPath) as? ImageCollectionViewCell 
     cell?.setInformation("image") 
     return cell! 

    } 


} 

InstagramViewCell

Wo Sammlung Ansicht haben folgende Einschränkungen:

enter image description here

Schritt 2: eine UICollectionViewCell erstellen (als wie ImageCollectionViewCell), die Bildansicht enthält.

import UIKit 

class ImageCollectionViewCell: UICollectionViewCell { 

    @IBOutlet weak var imageView: UIImageView! 

    override func awakeFromNib() { 
     super.awakeFromNib() 
    // Initialization code 
    } 

    func setInformation(_ imageName : String) { 

    self.imageView.image = UIImage.init(named: imageName) 

    } 

} 

enter image description here

Schritt 3: Verwenden InstagramViewCell in dem Controller.

import UIKit 

class ViewController: UIViewController { 

    @IBOutlet weak var table: UITableView! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     let backButton = UIButton(type: .custom) 
     backButton.frame = CGRect(x:0,y:0,width: 45, height:45) 
     backButton.setImage(UIImage(named: "back-arrow-white"), for: .normal) 
     let backItem = UIBarButtonItem.init(customView: backButton) 
     self.navigationItem.leftBarButtonItem = backItem; 


     table.delegate = self 
     table.dataSource = self 
     table.estimatedRowHeight = 100.0 
     table.rowHeight = UITableViewAutomaticDimension 
     table.register(UINib.init(nibName: "InstagramViewCell", bundle: nil), forCellReuseIdentifier: "InstagramViewCell") 

    } 

    override func viewWillAppear(_ animated: Bool) { 
     super.viewWillAppear(animated) 


    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
    } 


} 

extension ViewController:UITableViewDelegate,UITableViewDataSource { 

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return 1 
    } 

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 

     let cell = tableView.dequeueReusableCell(withIdentifier: "InstagramViewCell") as? InstagramViewCell 
     let information:NSDictionary = [:] 
     cell?.setInformation(10, information) 
     return cell! 
    } 

    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { 
     return UITableViewAutomaticDimension; 
    } 

} 

enter image description here

Verwandte Themen