2017-05-19 4 views
0

Ich habe Wörter, die vom Server kommen, und dynamisch ich Sammelansicht eingerichtet, zeigt jede Zelle einen Buchstaben.UICollectionview fit zu einer Zeile dynamisch

aber wenn das Wort zu lang ist, schrumpfen alle.

enter image description here enter image description here

ich jeden Buchstaben will in die Sammelansicht passen, das Wort nur in einer Zeile passen sollte, so habe ich:

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { 
    let numberOfSets = CGFloat(self.letters!.count) 
    let width = (collectionView.frame.size.width - (numberOfSets * view.frame.size.width/15))/numberOfSets 
    let height = collectionView.frame.size.height/2 
    return CGSize(width : width, height : height) 
} 
+1

Sie müssen Halten Sie die Breite der CollectionViewCell konstant, wenn Sie nicht möchten, dass sie schrumpft. –

+0

@SanketBhavsar Ich möchte, dass sie schrumpfen, aber mit Proportionen .. wie kann es konstant sein? sie passen nicht in eine Zeile – knic1ned

+0

ist es in Ordnung, wenn der Text schrumpft? –

Antwort

0

Wählen Sie die UILabel und goto Attribut Inspektor

Attribute Inspector Snap

Dann se Lect Minimum Schriftgröße oder Minimum Schriftart Skala von Autoshrink Option und schließlich setzen Sie Ihre gewünschte Minimum Wert.

Ich hoffe, das funktioniert.

+0

Ich habe bereits automatische Schrumpfung auf dem Etikett – knic1ned

+0

und Sie haben Mindestschriftgröße auf? –

+0

Ja, http://i.imgur.com/2g9maKv.png – knic1ned

0

Ich denke, was Sie brauchen, hält die Zellen linksbündig, und mit fester Zellenbreite und Polsterung zwischen den Zellen. Kein dynamisches Padding bei wenigen Buchstaben. Du willst nicht, dass "a b c" "a ........ b ......... c" wird. Die Lösung ist eine maximale Auffüllung zwischen den Zellen, leider gibt es keine solche Einstellung mit Standard-Layout-Layout. Sie benötigen einen definieren:

class MaxSpacingCollectionViewFlowLayout : UICollectionViewFlowLayout { 
    override func layoutAttributesForElements(in rect: CGRect) -> [UICollectionViewLayoutAttributes]? { 
     guard let attributes = super.layoutAttributesForElements(in: rect) else { 
      return nil 
     } 

     if attributes.count <= 0 { return attributes } 

     let firstCellOriginX = attributes[0].frame.origin.x 

     for i in 1..<attributes.count { 
      let currentLayoutAttributes = attributes[i]; 
      if currentLayoutAttributes.frame.origin.x == firstCellOriginX { 
       continue //first cell of a new row 
      } 

      let prevLayoutAttributes = attributes[i - 1] 
      let prevOriginMaxX = prevLayoutAttributes.frame.maxX 
      if currentLayoutAttributes.frame.origin.x - prevOriginMaxX > 8 { // 8 here is the max padding 
       var frame = currentLayoutAttributes.frame 
       frame.origin.x = prevOriginMaxX + 8 
       currentLayoutAttributes.frame = frame 
      } 
     } 

     return attributes 
    } 
} 

dann das Standard-Layout ersetzen:

let collectionView = UICollectionView() 
    //...... 
    collectionView.collectionViewLayout = MaxSpacingCollectionViewFlowLayout() 

Schließlich ist die Delegatmethode sizeForItemAt simplely eine feste Breite zurückkehren konnte:

return CGSize(width : 35, height : 35) 
+0

Danke! Aber die Zeilen teilen sich auf, wenn der Text zu lang ist: http://i.imgur.com/03P4ACd.png – knic1ned

+0

Warum nicht collectionView mehr Breite geben? Es ist begrenzt? –

0

starten:

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { 

let size: CGSize = self.letters[indexPath.row].size(attributes: [NSFontAttributeName: UIFont.systemFont(ofSize: 18.0)])//18.0 replace it with your label font size. 

let height = collectionView.frame.size.height/2 

return CGSize(width: size.width+2 , height: height) 

} 
+0

Was meinen Sie mit '.letters [indexPath.row] .size'? um die Label-Schriftgröße zu bekommen? – knic1ned

+0

'let size: CGSize = self.Buchstaben [indexPath.row] .size (Attribute: [NSFontAttributeName: UIFont.systemFont (ofSize: YOUR_Label_Font_Size)]) 'würde die genaue Größe zurückgeben, die Ihr Inhalt benötigt. – Maddy

+0

Ich habe den obigen Code getestet und es funktioniert für mich atleast. – Maddy

Verwandte Themen